使用GraphAPI的AAD令牌无法访问我自己的Rest API?

问题描述 投票:1回答:1

我必须更改我的代码才能获得一个有效的令牌,这将允许我使用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/
azure active-directory azure-active-directory adal
1个回答
2
投票

您应该能够以静默方式获取其他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

© www.soinside.com 2019 - 2024. All rights reserved.