使用GraphAPI的AAD令牌无法访问我自己的Rest API?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用GraphAPI的AAD令牌无法访问我自己的Rest API?相关的知识,希望对你有一定的参考价值。
我必须更改我的代码才能获得一个有效的令牌,这将允许我使用Graph API访问AAD用户的详细个人资料信息
然而令我沮丧的是,最终意识到这个令牌不允许访问我的API,这也是在AAD后面的Azure上托管的?
有没有一种方法允许两者?
注意问题在于资源I在标题中传递 - 它可以是我的API,也可以是Graph,但我肯定不能要求用户登录两次?
什么是解决方案,然后一旦Graph Token用于登录就嵌入客户端密码..?
代码示例使用Microsoft.IdentityModel.Clients.ActiveDirectory
示例1 - 这将返回一个可用于我的API而非Graph的令牌
authContext = new AuthenticationContext(authority);
PlatformParameters p = new PlatformParameters(PromptBehavior.Auto, hwnd);
AuthenticationResult result = null;
result = await authContext.AcquireTokenAsync(todoListResourceId, clientId, redirectURI, p);
Resource = https://[mywebsite].azurewebsites.net/api/Timekeeper
示例2 - 这给了我一个可用于GraphAPI的令牌,但不是我的AAD API
Resource = https://graph.windows.net/
您应该能够以静默方式获取其他API的访问令牌。
用户不需要登录两次:)
AAD会为您的应用返回一个刷新令牌,该令牌实际上可以为您的应用拥有权限的任何API提供访问令牌。
ADAL会自动为您完成此操作。
您需要指定ADAL您不希望第二个提示:
var graphTokenResult = await authContext.AcquireTokenAsync("https://graph.windows.net", clientId, redirectURI, new PlatformParameters(PromptBehavior.Never));
PromptBehavior.Never
告诉ADAL不要提示用户,使用缓存中的令牌。
如果您希望ADAL显示登录屏幕,如果它无法使用其缓存来获取令牌,您也可以使用PromptBehavior.Auto
。
以上是关于使用GraphAPI的AAD令牌无法访问我自己的Rest API?的主要内容,如果未能解决你的问题,请参考以下文章
无法验证 AAD 访问令牌 - IDX10511:签名验证失败
在 Azure Pipelines 中使用托管标识:GetUserAccessToken:无法获取标识的访问令牌。 AAD 返回静默失败
如何使用 MSAL.js 为 Azure DevOps 获取有效的 AAD v2 令牌
如何使用MSAL.js为Azure DevOps获取有效的AAD v2令牌