OpenID Connect получает заявки в сеансе MVC - PullRequest
0 голосов
/ 18 декабря 2018

Мне нужно сохранить уникальный идентификатор пользователя в базе данных SQL.Мое приложение использует OpenID Connect через OWIN для аутентификации пользователей в Azure AD и основано на MVC 5 Framework.Я могу получить доступ к ObjectId пользователя через претензию http://schemas.microsoft.com/identity/claims/objectidentifier.Единственный способ, которым я знаю, как получить утверждения, - добавить делегата в свойство «Уведомления» в «OpenIdConnectAuthenticationOptions».Поскольку это является частью запуска приложения, делегат не может передать эту информацию в сеанс.

Я видел ответы на вопросы с похожими целями, которые рекомендуют использовать Graph API для соответствия User.Identity.Имя с помощью ObjectId.Я бы предпочел не делать этого, так как мое приложение достаточно ресурсоемко.

Вот то, что у меня есть до сих пор.Мне просто нужно получить претензию в сеансе или получить доступ к претензиям из сеанса.(Это не всегда работает, например, если пользователь уже вошел в систему, но это лучшее, что у меня есть)

Notifications = new OpenIdConnectAuthenticationNotifications
{
  AuthorizationCodeReceived = (context) =>
  {
    IEnumerable<Claim> claims = context.AuthenticationTicket.Identity.Claims;
    Claim objectId = claims.First(claim => claim.Type == "http://schemas.microsoft.com/identity/claims/objectidentifier");
    // ???
    return Task.FromResult(0);
  }
},

1 Ответ

0 голосов
/ 18 декабря 2018

Я думаю, что ответил на свой вопрос.Это хорошо работает.

ClaimsIdentity identity = User.Identity as ClaimsIdentity;
Guid objectId = new Guid(identity.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value);
Guid tenantId = new Guid(identity.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value);
...