Member 10014841 Ответов: 1

Несанкционированного доступа 401 при доступе openid сведений о пользователях локального компьютера на сервер ADFS


I'm trying to access the openId userInfo endpoint for a user on ADFS(not hybrid), with the following request using WebClient API:

//accessToken variable contains access token data
string userInfoURL = "https://[base-server-url]/userinfo?" + accessToken;
Uri userInfoUri = new Uri(userInfoURL);
byte[] userInfoBytes = webClient.DownloadData(userInfoUri);
string response = Encoding.UTF8.GetString(userInfoBytes);

I have successfully created a new Application Group with a Server Application as well as a Web API and the OpenID Connect protocol. The client permission is checked with openid oprtion. The Relying Party identifier is the same GUID as Client ID of the Server Application.

I have included {"scope", "openid"} during access token request. I am not looking for a custom token details, but only details from openid scope. As per my research only 'sub' value is accessible in this request. I would like to proceed with that.

While considering the access token and oauth authentication process, there is no issue with the access token and related procedures. But userinfo endpoint access fails.


Что я уже пробовал:

The response fails with '401' Unauthorized error.

Event logs from ADFS server is listed below:

(1)Received request with following properties:

Date: 2020-07-16 09:48:38 Remote endpoint: remote-ip(Not disclosing details) Local endpoint: local-ip(Not disclosing details) Http method: GET Request Url: /adfs/userinfo Query string: ?access_token=eyJ0eXAiOi....(Not disclosing details) Local Port: 443 User agent string: - Body data length: 0 Caller Identity: - Certificate Identity: - Relying Party: - Through proxy: False Proxy name: - Serialized Header: {"Host":"[host-name(Not disclosing details)]","X-MS-Endpoint-Absolute-Path":"/adfs/userinfo"}

(2)Following request context headers present:

X-MS-Client-Application: - X-MS-Client-User-Agent: - client-request-id: - X-MS-Endpoint-Absolute-Path: /adfs/userinfo X-MS-Forwarded-Client-IP: - X-MS-Proxy: - X-MS-ADFS-Proxy-Client-IP: -

(3)UserInfoListener.ParseRequest: Cannot find access token in the request.

(4)Sending response at time: '2020-07-16 09:48:38' with StatusCode: '401' and StatusDescription: 'Unauthorized'. Response headers set: {"WWW-Authenticate":"Bearer error="invalid_token", error_description="MSIS9923: Received invalid UserInfo request. Access token is not present in the request. The access token needs to be carried in Authorization Request Header Field or Form-Encoded Body Parameter."","Content-Type":"text/html; charset=utf-8"}

(5)UserInfoListener.WriteErrorResponse: The UserInfo endpoint meets error when process the request. Writing error response.

I appreciate any advice.

1 Ответов

Рейтинг:
1

Garth J Lancaster

В вашем коде есть вот что

Цитата:
строка userInfoURL = "https://[base-server-url]/userinfo?" + accessToken;
тем не менее сообщение об ошибке гласит
Цитата:
Получил недопустимый запрос сведений о пользователях. Маркер доступа отсутствует в запросе. Маркер доступа должен быть перенесен внутрь Поле Заголовка Запроса Авторизации или Форма-Закодированных Параметров Тела .
так что я сомневаюсь, что он видит знак .. Я бы попробовал
WebClient client = new WebClient();
client.Headers.Add(HttpRequestHeader.Authorization, 
    "Bearer " + accessToken);
// Do the download ... 


Member 10014841

Я запросил в соответствии с упомянутой модификацией. Но все равно происходит несанкционированная ошибка(401).

/переменная /accessToken содержит данные маркера доступа
строка userInfoURL = "https://[base-server-url]/userinfo;
Uri userInfoUri = новый Uri(userInfoURL);
WebClient client = новый WebClient();
клиент.Заголовки.Добавить(HttpRequestHeader.Авторизация,"предъявитель" + accessToken);
byte[] userInfoBytes = webClient.DownloadData(userInfoUri);
string response = Encoding.UTF8.GetString(userInfoBytes);

Garth J Lancaster

менять

byte[] userInfoBytes = webClient.DownloadData(userInfoUri);
к
byte[] userInfoBytes = client.DownloadData(userInfoUri);

Member 10014841

Извините за опечатку. Я имел в виду, что использовался экземпляр WebClient(клиент).

клиент.DownloadData(userInfoUri)

Несанкционированная ошибка 401 все еще происходит.

Garth J Lancaster

извините - (3) также говорит "UserInfoListener.ParseRequest: Не удается найти маркер доступа в запросе.- так что если он не примет это так, как я предложил, следуя тому, как он сказал это сделать, у меня больше ничего нет, что я могу предложить - надеюсь, у кого-то еще есть идея

Member 10014841

Большое спасибо за ваш совет. По крайней мере, я мог бы отправить запрос должным образом с вашим руководством. Пожалуйста, кто-нибудь, помогите мне в этом нерешенном вопросе..