Получите информацию пользователя из ADFS 2016, отреагируйте, ADAL.js - PullRequest
0 голосов
/ 18 декабря 2018

Я застрял в этом вопросе некоторое время, я использую ADAL.js во внешнем интерфейсе для обработки входа в систему и аутентификации.После входа мне нужно получить информацию для пользователя (роли, группы, имя и т. Д.), Однако я не могу получить ничего от конечной точки / adfs / userinfo, кроме 401.

ИтакПока я захожу в систему и получаю обратно id_token и токен доступа (или «adal.access.token.key {guid}» в браузере), который идентичен ключу доступа.Из-за проблемы cors на внешнем интерфейсе я затем отправляю это на внутренний контроллер mvc core 2.2 для вызова / adfs / userinfo, где я получаю 401. Код Javascript ниже

this.adalAuthentication.Instance.acquireToken(this.adalAuthentication.Instance.config.clientId, (error, token) => {
                    if (error || !token) {
                        console.log('ADAL Error Occurred: ' + error);
                        return;
                    }
                    axios({
                        method: 'get',
                        url: '/identity/completeLogin/' + token,
                        headers: {
                            'Authorization': 'Bearer ' + token
                        }
                    }).then((response) => { console.log(response.data) });

                });

И действие контроллера ...

[HttpGet("completeLogin/{access_token}")]
    public async Task<HttpResponseMessage> CompleteLogin(string access_token)
    {
        var client = new HttpClient();
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("OAuth" + access_token);
        var response = await client.GetAsync("https://adfs.server/adfs/userinfo");

        response.EnsureSuccessStatusCode();
        try
        {
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
            return response;
        }
        catch (Exception e)
        {
            throw(e);
        }
    }

На данный момент я в замешательстве, думаю, я либо не могу использовать ADAL для этого, либо, возможно, мне нужно использовать oidcinstead из OAuth / jwt, но яЯ не хочу переписывать много, просто чтобы узнать, что это тоже не работает или есть лучший / лучший способ сделать это.Кто-нибудь имел эту проблему раньше и / или может указать мне правильное направление или может видеть, где я иду не так?

Другие вещи, которые я пробовал;

  • попадание в конечную точку adfs / oauth / token (просто возвращается с ошибкой сервера adfs)
  • установка авторизации на бэкэнде на client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer" + access_token); (просто возвращает неверный токен).
  • Создание метода переднего и внутреннего бэкэнда и использование метода getCachedToken в ADAL AuthenticationContext

РЕДАКТИРОВАТЬ: У меня также есть этот вопрос, открытый с немного более конкретнымцель получения токена доступа с токеном id

1 Ответ

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

Здесь есть образец Почтальона здесь .

Имейте в виду, что userinfo возвращает только претензию sub.

...