使用graphapi的aad令牌无法访问我自己的REST API



我必须更改我的代码才能获得有效的令牌,该令牌可以让我使用Graph API

访问AAD用户上的详细配置文件信息

令我沮丧的是,最终意识到这个令牌不允许访问我的API,该API也托管在AAD后面的Azure?

后面?

是否有一种允许两者都可以的方法?

请注意,问题是我在标题中传递的资源 - 它是用于我的API或图形,但我肯定不能要求用户登录两次?

解决方案是什么,另一个然后嵌入客户端的秘密,一旦用于登录的图形令牌。?

代码示例使用Microsoft.InderityModel.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-这给我一个可以用于graplapi的令牌,但不能使用我的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 请勿提示用户,使用CACHES中的令牌

如果您希望Adal显示登录屏幕,则也可以使用PromptBehavior.Auto,如果无法使用其缓存来获取令牌。

相关内容

最新更新