Указывает ли OAuth 2 постоянный идентификатор для данного пользователя?

Я только что (пере)читал запись в блоге Роба Конери 2010 года OpenID — это кошмар в рамках исследования OpenID/OpenAuth. В идеале я хочу использовать несколько провайдеров OAuth, связанных с одной учетной записью, чтобы обеспечить устойчивость к недоступным провайдерам — войдите в систему с помощью Facebook, свяжите свои учетные записи Twitter и Google, и если в следующий раз вы посетите Facebook, вход в систему не работает. не имеет значения, вы можете использовать Twitter ИЛИ Google, чтобы войти и получить доступ к своим материалам — точно так же, как в реальном мире вы можете открыть банковский счет с паспортом и снять деньги позже, используя свои водительские права, если ваш паспорт не доступный.

Одна из главных проблем Роба в его статье заключается в том, что невозможно последовательно идентифицировать пользователя, использующего OpenID — кто-то может войти в систему с помощью Google, купить продукт, а затем вернуться и войти в систему с помощью Google через несколько дней и не сможет для доступа к продукту, который они купили, потому что нет уникального идентификатора, который гарантированно останется согласованным между двумя вызовами аутентификации Google.

Мне любопытно, было ли это решено в OAuth 2.0 - либо явно через спецификацию протокола, либо через какой-то консенсус по реализации среди основных поставщиков. На какое поле (если оно есть) я могу положиться, чтобы оно не менялось в течение всего срока действия отношений пользователя с конкретным провайдером OAuth?


person Dylan Beattie    schedule 20.05.2012    source источник


Ответы (2)


В рамках процесса OAuth2 для входа Google предоставляет конечную точку TokenInfo, которая используется для проверки и предоставить информацию о access_token, полученную ранее в процессе.

Информация о токене включает userid:

«Значение этого поля является неизменяемым идентификатором вошедшего в систему пользователя и может использоваться при создании и управлении сеансами пользователей в вашем приложении. Этот идентификатор один и тот же независимо от client_id. несколько приложений в одной организации».

что звучит как просто билет (или, возможно, жетон)!

userid присутствует только в том случае, если область https://www.googleapis.com/auth/userinfo.profile была включена в запрос токена доступа, так что не забывайте об этом.

Точно так же в API Facebook у вас есть доступ к API графа после получения доступа токен, откуда можно получить данные о пользователе, в том числе ID.

Twitter включает user_id в ответ токена доступа как часть своего API аутентификации.


Если вы используете OAuth в проекте .NET, это может быть полезно... Сегодня я обнаружил, что WebMatrix 2 Бета-версия включает клиенты OAuth2 для Facebook, Twitter, Windows Live, Google и Yahoo и может использоваться из проекта MVC. Мне сказали, что вам просто нужен WebMatrix.Security.dll и все готово. Он установлен в C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v2.0\Assemblies. Несмотря на то, что он находится в стадии бета-тестирования и спрятан, это хороший способ начать работу с DotNetOpenAuth библиотека чуть менее крутая.

person Robin Minto    schedule 26.05.2012

OAuth 2.0 не решает эту проблему — это не протокол идентификации/SSO.

Однако OpenID Connect (созданный на OAuth 2.0) работает. Возможно, вам повезет, и вы вернете адрес электронной почты пользователя через OpenID Connect (см. здесь — в зависимости от области действия), или вы можете получить обратно PPID, которые должны быть уникальными для данная проверяющая сторона. В любом случае - это должно быть возможно.

В качестве альтернативы можно использовать SAML. Он поддерживает множество различных вариантов идентификаторов пользователей, которые подойдут.

person Scott T.    schedule 22.05.2012
comment
но электронные письма могут измениться. так что на самом деле это не уникальный идентификатор. - person Dannyboy; 15.01.2014