Использование ClaimsIdentity для извлечения профиля пользователя через график AAD - PullRequest
0 голосов
/ 25 мая 2018

Я создаю аутентификацию пользователя на основе Azure Active Directory с использованием OpenId Connect.Я могу успешно войти на свой сайт, используя мою учетную запись в AAD.После входа в систему я хотел бы получить информацию о своей учетной записи через API AAD graph.

Я могу получить идентификатор пользователя с помощью ClaimsIdentity:

ClaimsIdentity identity = this.User.Identity as ClaimsIdentity;
string userID = identity.GetUserId();

И я могу получитьинформация пользователя через API графа:

public IUser GetProfileById(string userID)
{
    ActiveDirectoryClient client = GetAadClient();
    var user = client.Users.Where(x => x.ObjectId == userID).ExecuteSingleAsync().Result;
    return user;
}

Однако идентификатор пользователя, который хранится в ClaimsPrincipal, по-видимому, не является идентификатором объекта в AAD, поэтому мне нужно будет найти какой-то другой способ полученияинформация о пользователе.Другой вариант может заключаться в том, чтобы найти пользователя по адресу электронной почты, но я также не могу выяснить, как это сделать.Любая помощь или предложения будут оценены.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Вот быстрый ответ для всех, кто еще ищет.

 public void GetUserFromAD(GraphServiceClient gsc)
    {
        try
        {
            ClaimsIdentity identity = ClaimsPrincipal.Current.Identity as ClaimsIdentity;
            string objectID = identity.Claims.FirstOrDefault(x => x.Type == "http://schemas.microsoft.com/identity/claims/objectidentifier")?.Value;
            var user = gsc.Users[objectID].Request().GetAsync().Result;

        }
        catch(Exception ex)
        {
            // do something.
        }
    }

Обратите внимание, что вы можете использовать прямой поиск, используя Users [objectid], а не перечислять в списке результатов.

0 голосов
/ 25 мая 2018

Благодаря @juunas я узнал тип:

ClaimsIdentity identity = this.User.Identity as ClaimsIdentity;
string objectID = identity.Claims.FirstOrDefault(x => x.Type == "http://schemas.microsoft.com/identity/claims/objectidentifier")?.Value;

Затем идентификатор объекта можно использовать для получения информации о пользователе с помощью API-интерфейса графа AAD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...