ドキュメントには、これら2つのパラメータについてはあまり説明されていません。どういうわけかログインステータスチェックに関係していると思います。
ユーザーが現在ブラウザにログインしているかどうかを確認したい(つまり、googleでサインインし、「ログインしたままにする」をチェックした)
状態を区別できるようにしたい:
ユーザーがブラウザーにログインしていて(つまり、たとえばGoogleでサインインし、[ログインしたままにする]をオンにします)、そのユーザーは既に私のアプリ を承認しています。
その他の状態。(ユーザーはログインしていません。ユーザーはログインしていますが、まだ承認していないIDを使用しています...など)
私が最初の状態にあることがわかっている場合は、ポップアップを「表示」する必要はありません(top = 9999 left = 9999を指定します)
私はこのコードで2つの状態を理解しようとしています。これは、ユーザーの操作や視覚的な合図なしで実行する必要があります。
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が含まれています。