我正在开发托管在 azure 中的 asp.net core .net 5 Web 应用程序,我想为我们的客户提供 SSO 体验。
作为参考,我从https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/master/2-WebApp-graph-user/2-3-Multi -AAD管理员为 AAD 中的所有用户授予应用程序权限的租户。
该示例使用此处描述的管理员同意 URL:https ://docs.microsoft.com/en-us/azure/active-directory/develop/v2-admin-consent#request-the-permissions-from-a-目录管理员
就我而言,我只想让用户使用他们的公司帐户登录并在登录后阅读他们的电子邮件(没有其他个人资料数据)。所以我认为请求范围“openid”和“email”就足够了。但是我提供的范围值并不重要,呈现给管理员的对话框会显示其他权限请求(看起来像“profile”和“offline_access”(?)):
我建立这样的网址:
var state = Guid.NewGuid().ToString();
var currentUri = UriHelper.BuildAbsolute(
httpContext.Request.Scheme,
httpContext.Request.Host,
httpContext.Request.PathBase);
var authorizationRequest = string.Format(
"https://login.microsoftonline.com/organizations/v2.0/adminconsent?client_id={0}&scope={1}&redirect_uri={2}&state={3}",
Uri.EscapeDataString(this.microsoftIdentityOptions.ClientId),
Uri.EscapeDataString("openid email"),
Uri.EscapeDataString(currentUri + "tenant/processcode"),
Uri.EscapeDataString(state));
有趣的是,如果管理员授予对应用程序的访问权限,并且如果我检查 AAD 中“企业应用程序”的权限,我会看到我最初想要的“电子邮件”和“openid”权限:
但这对于 AAD 管理员来说非常令人困惑,我真的想呈现一个与我的权限请求匹配的对话框。