OpenId - как использовать checkid_immediate и x-has-session? - PullRequest
2 голосов
/ 13 сентября 2011

В документации мало что сказано об этих двух параметрах. Я так понимаю, они как-то связаны с проверкой статуса входа в систему.

Я хочу проверить, зарегистрирован ли пользователь в браузере (имеется в виду, вошли в систему с помощью Google и отметили «держать меня в системе»)

Я хочу иметь возможность различать состояния:

  1. Пользователь вошел в систему в браузере (то есть, вы вошли в Google для например, и отметьте «Держите меня в системе»), и этот пользователь уже одобрил мое приложение.

  2. Любое другое состояние. (пользователь не вошел в систему. пользователь вошел в систему, но с личность, которую он еще не утвердил ... и т. д.)

Если я знаю, что нахожусь в первом состоянии, мне не нужно «показывать» всплывающее окно (я даю ему top = 9999 left = 9999)

Я пытаюсь выяснить два состояния с помощью этого кода. Это должно быть сделано без какого-либо взаимодействия с пользователем или каких-либо визуальных подсказок.

public partial class WebForm1 : System.Web.UI.Page
    {
        protected string Url { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            var parameters = new Dictionary<string, string>();

            parameters.Add("openid.ns", "http://specs.openid.net/auth/2.0");
            parameters.Add("openid.claimed_id", "http://specs.openid.net/auth/2.0/identifier_select");
            parameters.Add("openid.identity", "http://specs.openid.net/auth/2.0/identifier_select");
            parameters.Add("openid.return_to", "http://localhost:17556/redirect.aspx");
            parameters.Add("openid.realm", "http://localhost:17556/");
            parameters.Add("openid.mode", "checkid_immediate");
            parameters.Add("openid.ns.ax", "http://openid.net/srv/ax/1.0");
            parameters.Add("openid.ax.mode", "fetch_request");
            parameters.Add("openid.ax.type.email", "http://axschema.org/contact/email");
            parameters.Add("openid.ax.required", "email");
            parameters.Add("openid.ns.ui", "http://specs.openid.net/extensions/ui/1.0");
            parameters.Add("openid.ui.mode", "x-has-session");

            string OpenIdEndpoint = https://www.google.com/accounts/o8/ud;

            var url = CreateUrlRequest(OpenIdEndpoint, parameters);

            WebClient wc = new WebClient();
            var res = wc.UploadString(url, "");
        }


        public string CreateUrlRequest(string i_Url, Dictionary<string, string> i_Parameters)
        {
            return string.Format("{0}?{1}", i_Url, string.Join("&", i_Parameters.Select(kvp => string.Format("{0}={1}", kvp.Key, kvp.Value)).ToList()));
        }
    } 

при выполнении этого кода обратный вызов отправляется на redirect.aspx, но строка запроса не содержит никакой информации о состояниях, которые меня интересуют. Среди прочего, она содержит openid.mode = setup_needed.

...