找不到范围(scp)中的Azure AD访问令牌

时间:2018-10-08 07:56:34

标签: c# azure-active-directory microsoft-graph

我已经在Azure AD中创建了多租户应用程序 当我尝试获取访问令牌并签入jwt.io时,我发现缺少scp(作用域)。

//string authority = "https://login.microsoftonline.com/{0}/common/oauth2/v2.0/token?&response_type=code&scope=openid%20profile%20User.ReadWrite%20User.ReadBasic.All%20Sites.ReadWrite.All%20Contacts.ReadWrite%20People.Read%20Notes.ReadWrite.All%20Tasks.ReadWrite%20Mail.ReadWrite%20Files.ReadWrite.All%20Calendars.ReadWrite";
//string authority = "https://login.microsoftonline.com/{0}/common/oauth2/v2.0/token?&scope=https://graph.windows.net/directory.read%20https://graph.windows.net/directory.write";
//string authority = "https://login.microsoftonline.com/{0}/common/oauth2/v2.0/token";
//string authority = "https://login.microsoftonline.com/{0}";
//string authority = "https://login.microsoftonline.com/{0}/common/oauth2/v2.0/token?&response_type=code&scope=openid%20profile%20User.Read%20User.ReadWrite%20User.ReadBasic.All";
//string authority = "https://login.microsoftonline.com/{0}/oauth2/token?scope=User.ReadBasic.All";
//string authority = "https://login.microsoftonline.com/{0}/oauth2/token?scope=User.ReadBasic.All";
string authority = "https://login.microsoftonline.com/common/oauth2/v2.0/token?response_type=token&scope=User.ReadBasic.All";

我已经尝试了多种授权URL组合

string graphResourceId = "https://graph.microsoft.com";
string clientId = "XXXX";
string secret = "XXXX";
authority = String.Format(authority, tenantId);
AuthenticationContext authContext = new AuthenticationContext(authority);
var accessToken = authContext.AcquireTokenAsync(graphResourceId, new ClientCredential(clientId, secret)).Result;

enter image description here

如何获取microsoft.graph资源的范围?

1 个答案:

答案 0 :(得分:4)

如果是委派的权限,这些权限将在运行时作为客户端访问令牌中的“ scp” 声明提供给资源。

但是您正在使用 Application 权限,该权限使用客户端应用程序的凭据/身份指定基于角色的访问,并在运行时以“ 角色”的形式显示给资源。 ”以客户的访问令牌声明。

  

委派”权限(使用来自已登录资源所有者的委派授权指定基于范围的访问)权限在运行时以“ scp ”声明了客户端的访问令牌。

     

应用权限(使用客户端应用的凭据/身份指定基于角色的访问)在运行时作为“ 角色”声明中的资源呈现给资源。客户的访问令牌。


  

如何获取microsoft.graph资源的范围?

我们可以从此link中获得答案。

  通过在Azure门户的“ 应用程序” /“设置”选项卡上的“必需的权限”下,通过选择所需的“委派的权限”和“应用程序权限”(<后者需要具有Global Admin角色的成员身份)。由于公共客户端不能安全地维护凭据,因此它只能请求委派权限,而机密客户端则可以请求委派权限和应用程序权限。客户端的应用程序对象将声明的权限存储在其requiredResourceAccess属性中。

enter image description here