首页 > 解决方案 > 使用 ASP.Net Core 检测外部 Azure AD 用户

问题描述

针对我的 AzureAD 租户进行身份验证的用户可以访问我的 ASP.Net Core 2.2 Web 应用程序。我可以像这样在控制器中获取他们的 UPN:this.User.FindFirst(ClaimTypes.Upn).Value

问题是来宾(外部)用户登录时。以上将失败,因为他们没有 UPN 声明。我在 User 对象上找不到任何属性或声明,表明该用户是否是我的租户的成员。

检测用户是否是来宾用户的正确方法是什么?

标签: authenticationasp.net-coreazure-active-directory

解决方案


正如@juunas 所说,您可以检查idp索赔:

在此处输入图像描述

参考:https ://docs.microsoft.com/en-us/azure/active-directory/develop/id-tokens#payload-claims

您可以获取索赔值并检查不在同一租户中的用户帐户:

var idp = User.Claims.FirstOrDefault(c => c.Type == "http://schemas.microsoft.com/identity/claims/identityprovider")?.Value;

if (idp!=null)
{
   //user is not in same tenant
}

此外,如果您想获取iss标识构造和返回令牌的安全令牌服务 (STS) 的声明,您可以设置中间件以通过以下方式映射声明:

services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
    .AddAzureAD(options => Configuration.Bind("AzureAd", options));

services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
    options.ClaimActions.Remove("iss");
});

并通过以下方式获取发行人:

var issuer = User.Claims.FirstOrDefault(c => c.Type == "iss")?.Value;

推荐阅读