当我获得管理员同意时,为什么在使用范围user.readwrite.all时会收到错误AADSTS65001

时间:2016-10-04 10:23:26

标签: c# openid-connect microsoft-graph azure-active-directory msal

我正在使用azuread创建一个c#Web应用程序。该应用程序将允许Azure广告管理员管理租户的用户。为此,我需要来自登录用户的租户的特定授权。

我的代码适用于大多数范围,例如' user.readwrite'和' directory.readwrite.all'。但是当我添加范围' User.ReadWrite.All'我收到以下错误:

  

AADSTS65001:用户或管理员未同意使用   具有ID' 客户端应用程序ID 的应用程序'。发送一个   此用户和资源的交互式授权请求。

相关用户是来自https://apps.dev.microsoft.com/的应用程序的所有者 在这个应用程序中,我添加了范围:Mail.Send,User.Read,User.ReadWrite,Directory.ReadWrite.All和User.ReadWrite.All。 对于最后两个范围,需要管理员同意。

但要强制管理员同意,即使用户是所有者。我使用此URL为我的管理员和租户中的所有用户同意上述范围的应用程序。

  

login.microsoftonline.com/common/adminconsent?client_id= 客户端   申请ID & state = adminconsentstate& redirect_uri = uri of my local   web应用

在Web应用程序中,我使用Microsoft端点v2.0与Azuread连接。

  

login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id= 客户端   应用   ID &安培; response_mode = form_post&安培; RESPONSE_TYPE =代码+ id_token&安培;范围=的OpenID +电子邮件+轮廓+ offline_access&安培;状态= OpenIdConnect.AuthenticationProperties%3D ...&安培;提示= select_account&安培; REDIRECT_URI = 重定向   网址& post_logout_redirect_uri = 退出重定向网址

我使用以下代码获取Accesstoken。

string userObjectId = "User Object Id Guid";
HttpContextBase baseContext = context.OwinContext.Environment["System.Web.HttpContextBase"] as HttpContextBase;
var tokenCache = new SessionTokenCacheMSAL(userObjectId,baseContext);

ConfidentialClientApplication cca = new ConfidentialClientApplication(_applicationSettings.ClientId,redirectUri.ToString(),new ClientCredential(_applicationSettings.AppKey), tokenCache);

var scopes = new List<string>();
scopes.Add("User.Read");
scopes.Add("user.readbasic.all");
scopes.Add("User.ReadWrite.All");
scopes.Add("Directory.ReadWrite.All");

var runTaskAcquireToken = Task.Run(async () => await cca.AcquireTokenByAuthorizationCodeAsync(scopes.ToArray(), context.Code));
runTaskAcquireToken.Wait();
var result = runtask.Result;

请求Accesstoken和范围&#39; User.ReadWrite.All&#39;使用,我收到错误&#39; AADSTS65001&#39;以上。当我删除范围&#39; User.ReadWrite.All&#39;时,我可以查看用户,获取DirectoryRoles和组织/租户。

奇怪的是,范围&#39; Directory.ReadWrite.All&#39;还需要与User.ReadWrite.All&#39; User.ReadWrite.All&#39;相同的管理员同意。根据微软的说法。

来源:

  

http://graph.microsoft.io/en-us/docs/authorization/permission_scopes

非常感谢任何帮助解决我的问题。

感谢。

0 个答案:

没有答案