Asp.net web api Azure AD userAssertion:令牌缺少作用域“Directory.Read.All”
我有一个Web API和一个使用ADAL库调用Web API的UI应用程序 在将应用程序注册到Azure AD时,我已经为Web API和UI应用程序授予了读取目录数据的委派权限 我在Web API中有以下代码,用于为登录用户保存令牌Asp.net web api Azure AD userAssertion:令牌缺少作用域“Directory.Read.All”,asp.net-web-api,azure-active-directory,Asp.net Web Api,Azure Active Directory,我有一个Web API和一个使用ADAL库调用Web API的UI应用程序 在将应用程序注册到Azure AD时,我已经为Web API和UI应用程序授予了读取目录数据的委派权限 我在Web API中有以下代码,用于为登录用户保存令牌 private void ConfigureAuthentication(IAppBuilder app) { app.UseWindowsAzureActiveDirectoryBearerAuthentication(
private void ConfigureAuthentication(IAppBuilder app)
{
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
TokenValidationParameters = new TokenValidationParameters { SaveSigninToken = true, ValidAudience = ConfigurationManager.AppSettings["ida:Audience"] }
});
}
现在在Web API控制器中,我尝试使用以下代码获取令牌以访问Microsoft AD Graph API
var bootstrapContext = ClaimsPrincipal.Current.Identities.First().BootstrapContext as System.IdentityModel.Tokens.BootstrapContext;
string userName = "test@onmicrosoft.com";
string userAccessToken = bootstrapContext.Token;
UserAssertion userAssertion = new UserAssertion(bootstrapContext.Token, "urn:ietf:params:oauth:grant-type:jwt-bearer", userName);
var authContext = new AuthenticationContext(string.Format(CultureInfo.InvariantCulture, aadInstance, tenant));
var clientCred = new ClientCredential(clientId, appKey);
var result = await authContext.AcquireTokenAsync("https://graph.windows.net", clientCred, userAssertion);
accessToken = result.AccessToken;
上面的代码返回令牌,但范围值如下
`scp: "User.Read"`
问题-为什么令牌不提供目录访问directory.Read.All,因为我已经设置了目录访问权限
`scp: "Directory.Read.All User.Read"`
更新:
我缺少授权权限下读取目录数据的权限。授予授予权限后,我能够获得范围为scp的令牌:Directory.Read.All User.Read
如果我理解正确,您希望使用Microsoft Graph API,而不是Azure AD Graph API 然而,基于您在本问题中发布的屏幕截图是一个v1 enpoint AAD应用程序,它与您试图接近的Microsoft Graph API无关。所以,无论您在这个应用程序上做了什么更改,结果都应该是相同的。我建议您在注册v2 enpoint应用程序 下面是一个演示如何获取用于使用Microsoft Graph的身份验证令牌的示例
希望这有帮助 您想使用AAD Graph API还是Microsoft Graph?您设置的权限是针对Azure AD Graph API,而不是Microsoft Graph。此外,v1端点的作用域可以在清单中定义,您可以更改oauth2Permissions的值。一旦它被定义,它将保留该值。这个案例有任何处理吗?@Wayne,我可以在单击“授予权限”后获得“读取目录数据”权限。请参阅我的问题更新。谢谢你的帮助嘿,谢谢你的回复,你是说这是错误的urn:ietf:params:oauth:grant type:jwt beareri想使用Azure AD Graph API我需要更改的值是oauth2Permissions@Sorry对于我的误解,如果您想使用AAD Graph API,范围是在oauthPermissions的值中定义的,你能建议吗?如何设置