Обнаружение внешних Azure пользователей AD с ASP. Net Core - PullRequest
1 голос
/ 29 января 2020

Пользователи, прошедшие аутентификацию на моем клиенте AzureAD, могут получить доступ к моему ASP. Net Core 2.2 веб-приложению. Я могу получить их UPN в контроллерах следующим образом: this.User.FindFirst(ClaimTypes.Upn).Value

Проблема в том, что гостевые (внешние) пользователи входят в систему. Выше произойдет сбой, поскольку у них нет претензий UPN. Я не могу найти свойство или претензию к объекту User, который указывает, является ли пользователь участником моего арендатора.

Как правильно определить, является ли пользователь гостевым пользователем?

1 Ответ

2 голосов
/ 30 января 2020

Как сказал @juunas, вы можете проверить претензию idp:

enter image description here

Ссылка: https://docs.microsoft.com/en-us/azure/active-directory/develop/id-tokens#payload -претензии

Вы можете получить значение претензий и проверить учетную запись пользователя не в том же арендаторе:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...