Является ли OpenID слишком сложным?

Я начинаю серьезно сомневаться в сообществе OpenID, несмотря на то, что он работает.

В настоящее время я оцениваю OpenID как службу проверки подлинности для сайта 'this', а promises отлично, я просто не могу заставить его работать. И я действительно потерялся.

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

Мой сценарий очень типичен. Я хочу аутентифицировать пользователей через определенный домен Google Apps. Если у вас есть доступ к этому домену Google Apps, у вас есть доступ к моему веб-приложению.

Когда я теряюсь, все необходимые предпосылки и зависимости.

  • Что такое XRD?
  • Что такое Ядис?
  • Зачем мне нужны XRD и Yadis?
  • Что мне нужно сделать для развертывания проверки подлинности OpenID на моем веб-сайте?

Кроме того, это действительно важно для меня.

Когда я вхожу в систему SO, я использую свой аккаунт Google. Когда я нажимаю кнопку входа в систему, мне предоставляется эта страница подтверждения. Где я предоставляю SO право использовать учетные данные учетной записи Google.

Каким-то образом Google знает, что это "Stackoverflow.com", который спрашивает меня, нормально ли входить в систему. И я хочу знать, какой контроль над этим маленьким текстом. Я намерен развернуть OpenID на нескольких разных доменах, но я бы предпочел, чтобы все они работали без индивидуальной настройки со специальными параметрами, такими как секретные ключи API, а что нет. Однако я не знаю точно, является ли это предварительным условием OpenID, или API федеративного входа, который предоставляет Google.

Ответы

Ответ 1

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

Что вы хотите, и то, что вы ищете, это код для работы с ретрансляцией OpenID. Это "вы" как потребитель провайдеров OpenID. Вы вводите конечную точку OpenID и voila, у вас включен OpenID ваш сайт, этот код иллюстрирует это на практике.

// using DotNetOpenAuth
var openid = new OpenIdRelyingParty();
var response = openid.GetResponse();
if (response == null)
{
    // Google account end point (works fine)
    var googleID = "https://www.google.com/accounts/o8/id";
    // Google hosted account end point
    //  https://www.google.com/accounts/o8/site-xrds?hd=mydomain.com
    // I was unable to test this, but I was running my RP (this code)
    // from localhost and it quite possible that a hosted account RP
    // has to return to the same domain.
    // It went fine, but crashed with a "Unable to resolve mydomain.com" error
    // once I logged in.
    openid.CreateRequest(googleID).RedirectToProvider();
}
else
{
    switch (response.Status)
    {
        case AuthenticationStatus.Authenticated:
            // Success
            // to allow persistance across sessions
            // you'll have to track the "claimed identifier"
            // some OpenID providers allow you to get an email address through
            // extensions but this is not always possible.
            // the claimed identifier is typically your safest bet
            // and it a big URL which uniquely identifies the guest
            // as a specific user, however, you know very little about this user
            // which is a good thing becuase you don't have to give out personal or
            // sensitive information to start using a service.
            break;

        default:
            // Something went wrong, check Status property
            break;
    }
}

Пока я это выяснял, у меня сложилось впечатление от каждой спецификации. что я должен был разместить свой собственный "поставщик OpenID", который заставлял его звучать так, как будто я должен был обрабатывать учетные записи или какую-то часть процесса. На самом деле все, что я должен был сделать, это.

Запросить этот URL-адрес или получить запрос OpenID в ответ. Проверьте, содержит ли этот запрос действительную регистрационную информацию.

Ответ 2

Чтобы ответить на ваш вопрос (т.е. не принимать во внимание все аргументативные точки), я как-мы говорим, используя DotNetOpenAuth для реализации авторизации OpenID для одного из моих сайтов; и это было довольно тривиально.

Это просто элемент управления .NET, который вы его удаляете, настройте крошечное количество вещей, а затем дайте ссылку на аутентификацию форм. Очень приятно.

Ответ 3

Хорошо, у вас много вопросов под одним заголовком. Позвольте мне посмотреть, могу ли я сломать его.

XRD и Yadis:

"Ядис" - это имя для части обнаружения службы OpenID - бит, который доставит вас от "моего OpenID is example.com" к "авторитетному серверу для моего OpenID на openid.example.com/server и он поддерживает v2 с расширениями AX". XRDS - это XML-схема, содержащая эту информацию.

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

"Что мне нужно сделать для развертывания?"

См. Joseph Smarr Рецепт для активации OpenID на вашем сайте. Святая корова, которая уже 2+ лет? Тем не менее он все еще имеет значение.

Как поставщик OpenID идентифицирует ваш сайт (полагающаяся сторона):

Этот маленький текст (например, "stackoverflow.com" ) является областью OpenID, которая является параметром, который вы передаете провайдеру, и является строгим подмножеством URL-адреса конечной точки, который используется для обработки их ответа. (Итак, если вы сообщите серверу отправить ответ OpenID серверу2.example.com/foobar, ваше пространство может быть example.com или server2.example.com или server2.example.com/foobar, но не server99.example.com.)

Секретные ключи API:

В общем, для получения не существует секретного ключа API вне зоны. Для поставщиков OpenID общего назначения ключи просто выдаются через стандартный механизм ассоциации OpenID.

Теперь вы столкнулись с некоторыми функциями, которые поставщик OpenID, возможно, считает ценным - например, "как я могу сообщить пользователю более удобным для пользователей, на каком сайте они входят, чем показывать им URL выдержка" или "как я могу идентифицировать этот запрос, действительно происходит из RP, у меня есть какие-то договорные отношения с", но такие функции не являются чем-либо, что в стандарте OpenID 2.0.

Ответ 4

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

Работая в качестве прокси-сервера между сторонними поставщиками идентификационных данных и вашим сайтом, RPX помогает вам легко аутентифицировать пользователей с их существующей учетной записью на Facebook, Google, Yahoo!, Twitter, MySpace, AOL, Windows Live/MSN/Hotmail или любых других Поставщик OpenID.

Ответ 5

По моему опыту, да.

Я пытался использовать DotNetOpenAuth, в частности, в Mono, и не получил никуда быстро, и я попробовал много способов заставить его работать, и в конечном итоге очень расстроился.

Без альтернатив я использовал LoginRadius (уже использующий сайт WordPress, который у меня был), и нашел его намного проще, плюс он всплывает для всплывающего окна, чтобы выполнить аутентификацию, а именно, как я хотел бы получить ее с помощью DotNetOpenAuth.

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