OAUTH2, как я могу взять имя пользователя, если у меня есть доступ или refresh_Token - PullRequest
2 голосов
/ 05 марта 2019

У меня есть приложение C #, которое использует oauth2 для подключения к стороннему приложению.Сначала пользователь перенаправляется во внешнее приложение (ERP), где он вводит имя пользователя и пароль, и генерируется токен доступа, действительный в течение 1 часа, и генерируется токен обновления, действительный 50 лет.Я использую этот токен обновления из своего приложения и на основании этого я получаю новый токен доступа. У меня есть ClientId и ClientSecret.Могу ли я получить зарегистрированное имя пользователя с этими 2 токенами?

Request :
POST /connect/token HTTP/1.1
Authorization: Basic base64(client_id:client_secret)
Content-Type: application/x-www-form-urlencoded;charset=UTF-8

"grant_type=refresh_token&refresh_token=<refresh_token>"

Response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
  "access_token": <access_token>,
  "refresh_token": <refresh_token>,
  "token_type":"bearer",
  "expires_in":3600
}

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Если вы получаете токен в формате JSON Web Token (обычно называемый автономным токеном доступа) , то вы можете декодировать полезную нагрузку токена и получить имя пользователя. Обычно это может быть задано как субъектное («вспомогательное») утверждение или оно может быть отправлено в виде отдельного утверждения в JWT. Перейдите по этой ссылке , чтобы узнать о претензиях JWT.

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

В качестве альтернативы вы можете переключиться на [ OpenID Connect ] (OIDC) 3 . Это будет включать идентификатор токена в ответе токена, который является JWT. Вы можете использовать это для получения имени пользователя (+ другая информация о пользователе) и аутентификации конечного пользователя в дополнение к проверке JWT. Проверьте, поддерживается ли OIDC вашим сервером авторизации.

Что касается токена обновления, у вас должен быть действительный токен доступа или действительный ответ токена, чтобы получить все вышеперечисленное. Обновление не имеет никакого значения для вашего приложения, кроме как для получения новых, обновленных токенов.

0 голосов
/ 05 марта 2019

Вы можете попробовать что-то вроде декодирования вашего токена с помощью одной из библиотек на jwt.io , вы можете протестировать его, скопировав и вставив свой токен на сайт и проверив, содержит ли ваш токен нужную вам информацию.,затем, если вы прокрутите вниз, есть много библиотек, которые вы можете использовать для декодирования токенов в вашем коде.Взгляните на официальную библиотеку Microsoft здесь , которую также можно установить через менеджер пакетов nuget Install-Package System.IdentityModel.Tokens.Jwt

...