2015-03-26 2 views
8

Я потратил последние несколько дней на чтение всех спецификаций в отношении OAuth2 и OpenIDConnect и внедрение тестового клиента с использованием Thinktecture Identity Server. Я также следил за несколькими курсами по множественному выбору, и я думаю, что они понимают основную суть этого. Однако я все еще очень смущен в отношении типов ответов.OpenIDConnect Тип ответа Confusion

Спецификация OpenIDConnect указывает, что типы ответов гибридного потока представляют собой комбинацию «код», «id_token» и «токен». Я понимаю, что «id_token» позволяет нам сначала получить доступ к базовой информации об идентификаторе.

Я также понимаю, что код «относится к коду авторизации, а« токен »относится к токену доступа и сочетанию« кода »с одним или двумя из двух других триггеров потока, но я понимаю, что вы меняете код авторизации для маркер доступа в потоке авторизации, а неявный поток подает код доступа неявно?

Может кто-нибудь прояснить мое замешательство?

ответ

8

Следующих заявления, которые вы сделали правильно:

  • code относится к Authorization Code
  • token относится к Токену доступа или (access_token)
  • в коде авторизации поток один переключает code для access_token

Но часть вашего конфликта слияние может происходить из-за терминологического смешивания:

  • термин «Авторизация» не совсем корректен; его официальное название Код авторизации потока
  • термин Код доступа не существует
  • неявного потока не имеет код авторизации (ни коду доступа) на самом деле нет учетных данных (или гранта) участвуют во всем, что позволяет Клиент, чтобы получить маркера от конечных маркеров, следовательно, это имя

Как @juanifioren отметил, Гибридные потоки скомбинировать вещи:

  • code id_token потока получит code и id_token в ответе аутентификации напрямую, но вы бы использовать code получить access_token от конечной точки маркеров
  • code token поток будет получить code и access_token в ответе аутентификации напрямую, но вы бы использовать code, чтобы получить id_token и, возможно, другой access_token в бэкэнде от конечных маркеров
  • code id_token token потока будет получить code, access_token и id_token в ответе аутентификации непосредственно и вы можете использовать code в бэкэнде, чтобы получить другойaccess_token из маркеров конечной

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

Смотрите также короткую нить в списке рассылки спецификации по этой теме: http://lists.openid.net/pipermail/openid-specs-ab/Week-of-Mon-20150209/005229.html

+0

Спасибо за очистку терминологии - я до сих пор не знаю, зачем мне понадобиться второй 'access_token' из' token_endpoint'? Будет ли это потому, что у меня может быть приложение, которое может использовать оба потока? – RNDThoughts

+0

Да, если ваше приложение способно для обоих потоков, оно может получить 2 токена доступа; он может это сделать, потому что он доверяет потоку обратного канала больше, чем передний канал. –

+0

Другая причина в том, что токен обновления отображается только на заднем канале. Вы никогда не получите токен обновления с использованием неявного потока, поэтому то же самое должно быть верно для токена, возвращаемого с конечной точки авторизации во время гибридного потока. –

0

ваших мыслей о Authorization Code Flow и неявном потоке прав. Но я думаю, что вы чрезмерно усложняют гибридный поток. При использовании гибрида вы просто можете получить код и id_token.

После этого вы можете получить код и обменять его на токен доступа или просто использовать id_token (или токен доступа) напрямую. Оба подхода имеют свои недостатки, особенно с точки зрения безопасности.

+0

То, что вы говорите, верно для " code id_token "response_type, но есть также определенные« токены кода »и« код id_token token ». Каковы реальные случаи использования, когда вам нужны эти значения для response_type? Спецификация не дает нам никакого намека, и я откровенно понятия не имею.В общем, я думаю, что преимущество гибридного потока заключается в том, что подписанный и зашифрованный id_token добавляет безопасность для связи незащищенного фронтального канала, особенно если ваш клиент использует ключ от предварительно зарегистрированных jwks. (BTW, вы можете сравнить токены в LDAP Gluu Server, чтобы увидеть различия.) –

3

Чтобы понять возможные отношения между типами реагирования и грантов Типы см IdentityServer4\Constants.cs

public static readonly Dictionary<string, string> ResponseTypeToGrantTypeMapping = new Dictionary<string, string> 
     { 
      { OidcConstants.ResponseTypes.Code, GrantType.AuthorizationCode }, 
      { OidcConstants.ResponseTypes.Token, GrantType.Implicit }, 
      { OidcConstants.ResponseTypes.IdToken, GrantType.Implicit }, 
      { OidcConstants.ResponseTypes.IdTokenToken, GrantType.Implicit }, 
      { OidcConstants.ResponseTypes.CodeIdToken, GrantType.Hybrid }, 
      { OidcConstants.ResponseTypes.CodeToken, GrantType.Hybrid }, 
      { OidcConstants.ResponseTypes.CodeIdTokenToken, GrantType.Hybrid } 
     }; 
Смежные вопросы