Как передать пароль, указанный пользователем для openid, не заходя на сайт openid в .Net? - PullRequest
0 голосов
/ 10 июля 2009

Я использую следующий код.

OpenIdRelyingParty createRelyingParty()
{
    OpenIdRelyingParty openid = new OpenIdRelyingParty();
    int minsha, maxsha, minversion;
    if (int.TryParse(Request.QueryString["minsha"], out minsha))
    {
        openid.Settings.MinimumHashBitLength = minsha;
    }
    if (int.TryParse(Request.QueryString["maxsha"], out maxsha))
    {
        openid.Settings.MaximumHashBitLength = maxsha;
    }
    if (int.TryParse(Request.QueryString["minversion"], out minversion))
    {
        switch (minversion)
        {
            case 1: openid.Settings.MinimumRequiredOpenIdVersion = ProtocolVersion.V10; break;
            case 2: openid.Settings.MinimumRequiredOpenIdVersion = ProtocolVersion.V20; break;
            default: throw new ArgumentOutOfRangeException("minversion");
        }
    }
    return openid;
}

OpenIdRelyingParty openid = createRelyingParty();  
IAuthenticationRequest request = openid.CreateRequest(openIdBox.Text); 

request.RedirectToProvider();  

вышеприведенная строка идет на сайт openid для получения аутентификации. Но я бы хотел пройти аутентификацию, не заходя на сайт openid Можете ли вы помочь мне. Спасибо

Ответы [ 4 ]

18 голосов
/ 10 июля 2009

Если я правильно понимаю, то, что вы пытаетесь сделать, это сохранить имя пользователя и пароль OpenID на своем сайте, а затем передать их OpenID в фоновом режиме для аутентификации. Разве вы не видите, что это очень плохая идея? Если бы OpenID сделал это возможным, я бы прекратил их использовать. Я не хочу, чтобы они предоставляли возможность клиентским приложениям захватывать мое имя пользователя и пароль, большое спасибо ... !!!!

9 голосов
/ 10 июля 2009

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

Кроме того, Имя пользователя + Пароль - не единственный возможный способ входа пользователей в OpenID

* 1004.* Например, у моего OpenID нет пароля, у него есть сертификат + подтверждение, а у моего запасного варианта есть имя пользователя + пароль + логин Yubikey OTP.

Итак, эффективно ... Работать скак вы себе представляли с этим вопросом, так как пароль может даже не быть частью OpenID или недостаточен для включения входа в систему.

3 голосов
/ 10 июля 2009

Когда вы используете OpenID, вы даете им ответственность за идентификацию и аутентификацию, и они делают это за вас. Если вы хотите увидеть информацию, используемую для аутентификации и обработки ее в вашем коде, OpenID не для вас.

0 голосов
/ 11 июля 2009

Единственный способ избежать перенаправления на провайдера - это использовать всплывающее окно. Последняя версия DotNetOpenAuth (v3.2) добавляет поведение всплывающего окна, чтобы вы могли это сделать. Используйте элемент управления OpenIdTextBox и установите его свойство Popup равным Always.

Кстати, похоже, вы скопировали свой код из файла loginProgrammatic.aspx.cs образца DotNetOpenId. Просто чтобы вы знали, вы можете взять всю эту проверку QueryString и специальную логику. Это просто для поддержки тестирования взаимодействия.

...