在 MSAL 中获取不同的访问令牌从设备代码流中获取令牌

Getting different access tokens in MSAL get token from device code flow

我有一个控制台应用程序,用于对用户进行身份验证,然后调用 Web API。我正在使用此 Microsoft 库获取令牌,active-directory-dotnetcore-devicecodeflow-v2, I registered both of my console application and API in Azure AD and gave the permissions and role needed based on this doc : GitHub readme,因此我在 Azure 中的控制台应用程序注册中拥有如下权限。

现在,当我在范围列表中添加新范围 "http://{domain}/Migratory.API/api.access" 并调用 "AcquireATokenFromCacheOrDeviceCodeFlowAsync" 方法时,出现了一些冲突:

如果我第一次调用该方法,它会调用 "GetTokenForWebApiUsingDeviceCodeFlowAsync" 结果不包含我的范围,它只包含 "User.Read , User.ReadBasic.All, All profile openid email",但如果我再次调用该方法,这次它会调用“AcquireTokenSilent" 方法,而这个方法在作用域中只有 "http://{domain}/Migratory.API/api.access"。结果它会生成两个不同的标记,我不明白为什么。

知道我应该如何解决这个问题或哪里做错了吗? 谢谢

My permissions in Azure

你得到的第一个token是用来调用ms graph的api,User.Read User.ReadBasic.All profile openid email这些是graph api的权限,所以这个token显然不适合你。你的第二个令牌就是你需要的。

对了,这两种不同的api资源的权限不能同时出现在一个token中,因为一个token只能调用一个api资源。