我必须更改我的代码才能获得有效的令牌,该令牌可以让我使用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
,如果无法使用其缓存来获取令牌。