我正在使用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
非常感谢任何帮助解决我的问题。
感谢。