2012-01-17 1 views
4

Я настраиваю провайдера OpenID, используя DotNetOpenAuth, и я застрял.Как использовать OpenID, не запрашивая у пользователя его URL OpenID?

Похоже, что OpenID требует, чтобы пользователь сначала предоставил свой URL OpenID, а затем потребитель перенаправил его на провайдера, указав URL как параметр (checkid_setup mode).

Но с Google и некоторыми другими провайдерами он работает по-разному. Вы просто перенаправлены на общую страницу, на которой вы должны войти или выбрать один из аккаунтов, с которыми вы уже вошли. Или просто перенаправлен обратно, если вы вошли в систему с одной учетной записью.

Это как-то связано с режимом checkid_immediate? Если да, пожалуйста, дайте мне ссылку на статью, объясняющую, как это работает.

ответ

4

Разница в поведении, которую вы видите, ортогональна режимам checkid_setup и checkid_immediate, которые вы замечаете.

Если пользователь вводит свой собственный OpenID, это называется Идентифицированный идентификатор. Если вместо этого пользователь просто нажимает (или набирает) своего провайдера (например, Google в вашем примере), это называется OP Идентификатор.

Например, если вы введете https://www.google.com/accounts/o8/id в поле OpenID, вы увидите поведение, которое вы описываете, поскольку Google поможет пользователю войти на ваш веб-сайт, кто бы это ни был.

Так что на данный момент у вас есть несколько вариантов:

  1. Если ваш сайт основан на веб-форм ASP.NET, вы можете использовать элемент управления OpenIdButton, набрав в https://www.google.com/accounts/o8/id идентификатора в соответствующее имущество, и пользователь может нажать эту кнопку, чтобы просто войти в систему, используя свою учетную запись Google.

  2. Если вы используете MVC (или используете веб-формы, но хотите сделать это программно), вы можете позвонить OpenIdRelyingParty.CreateRequest("https://www.google.com/accounts/o8/id") и перенаправить пользователя с результатом в Google.

В любом случае, если пользователь уже зарегистрировался в Google, им не нужно будет входить в Google. И если пользователь уже сказал Google, что они одобряют вход в ваш веб-сайт, они вообще не будут видеть Google во время этого процесса входа в систему.

+0

Я настраиваю провайдера OpenID, а не потребителя. Но, в любом случае, я думаю, теперь я понимаю, как это работает. –

+0

Ох, кричит. Извините, что не заметил этого. Поэтому, если вы хотите, чтобы ваш собственный провайдер разрешил RP-системам делать то, что я описывал выше, вам нужно указать URL-адрес идентификатора OP, который, я считаю, демонстрирует образцы DNOA. Затем в пределах вашей конечной точки OP вы должны поддерживать 'IAuthenticationRequest.IsDirectedIdentity', определяя вошедший в систему идентификатор пользователя и устанавливая его в ответе auth самостоятельно. –