能否无需client_id仅通过用户名密码Web请求获取Azure访问令牌?
问题解答
能否不使用client_id获取访问令牌
不行,client_id是Azure AD OAuth 2.0密码授权流的必填参数,所有向https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token发起的令牌请求,都必须携带合法的client_id,缺少该参数的请求会直接被Azure AD拦截返回错误。
Get-AzAccessToken是否内部使用了client_id
是,当你调用Get-AzAccessToken且没有显式指定client_id参数时,命令内部会自动使用微软官方预置的Azure PowerShell公共客户端ID,该ID固定为1950a258-227b-4e69-a8d2-2b207562c205,是微软提前在Azure AD中注册好、专门给Azure PowerShell模块默认使用的公共客户端标识。
复现无显式client_id参数的Get-AzAccessToken效果
你可以直接将代码中的$ClientId替换为上述公共客户端ID,不需要自行注册应用即可完成请求,修改后的示例代码如下:
$postParams = @{ grant_type = 'password' client_id = '1950a258-227b-4e69-a8d2-2b207562c205' username = $Username password = $Password scope = 'https://graph.microsoft.com/.default' } Write-Host "Getting access token for app" Invoke-RestMethod ` -Uri https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token ` -Method POST ` -ContentType application/x-www-form-urlencoded ` -Body $postParams
内容的提问来源于stack exchange,提问作者jarrad_obrien
相关产品推荐
相关产品推荐

