2009-08-19 9 views
35

私はOpenIDを実装するためにdotnetopenauth 3.2を使用していますが、Googleがクレーム対応で電子メールアドレスを渡す方法を理解できません。私はGoogleが簡単な登録をサポートしていないことを知っていますが、彼らが何をサポートしているのかを判断することはできません。OpenID:Google OPから電子メールアドレスを取得しようとしています

この質問には、私はOpenIDの学習を始めたばかりですが、私は私の混乱につながっていると思う仕様をしっかり把握していません。

助けていただけたら幸いです!

答えて

52

よく分かりました。私はGoolge's Federated Log API groupに質問を掲示し、Attribute exchangeを使用するように言われました。

以下はDotNetOpenAuthのコードです。

このコードは本番環境では使用しないでください。これは説明のためのものです!

要求:

using (OpenIdRelyingParty openid = new OpenIdRelyingParty()) 
{ 
    IAuthenticationRequest request = openid.CreateRequest(openidurl); 

    var fetch = new FetchRequest(); 
    fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email); 
    request.AddExtension(fetch); 

    // Send your visitor to their Provider for authentication. 
    request.RedirectToProvider(); 
} 

応答:私は、応答がnullのフルネームを取得しようとすると、完全な名前を取得するためのソリューションを提供してください

OpenIdRelyingParty openid = new OpenIdRelyingParty(); 
var response = openid.GetResponse(); 
if (response != null) 
{ 
    switch (response.Status) 
    { 
     case AuthenticationStatus.Authenticated: 
     { 
      var fetch = response.GetExtension<FetchResponse>(); 
      string email = string.Empty(); 
      if (fetch != null) 
      { 
       email = fetch.GetAttributeValue(
        WellKnownAttributes.Contact.Email); 
      } 

      FormsAuthentication.RedirectFromLoginPage(
       response.ClaimedIdentifier, false); 
      break; 
     } 
     ... 
    } 
} 
+0

これは素晴らしいです。プロバイダ名を取得する方法も知っていますか(回答の分析は別として)? –

+0

要求されたIDですか? ケースAuthenticationStatus.Authenticated: { string identifier = response.ClaimedIdentifier; } – Rob

+0

私は彼がプロバイダの実際のフレンドリーな名前、すなわち「Google」「Facebook」のレスポンスを解析する必要があるという話をしていたと思います。 – Brian

1

、 この投稿は本当に役に立ちます ありがとうございました。 私のサンプルコードはこのようです。

var fetch = new FetchRequest(); 
      fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email); 
      fetch.Attributes.AddRequired(WellKnownAttributes.Name.FullName); 
      fetch.Attributes.AddRequired(WellKnownAttributes.Company.CompanyName); 
      //fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email); 

      request.AddExtension(fetch); 

そして

if (fetch != null) 
     { 
      email = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email); 
      name = fetch.GetAttributeValue(WellKnownAttributes.Name.FullName); 
      company = fetch.GetAttributeValue(WellKnownAttributes.Company.CompanyName); 
     } 
関連する問題