-1

私はこれについて本当に戸惑っています、私はこのような重複した投稿がいくつかあることを知っています、かなりの読書をしました、そして私はSREGとAXの両方の情報、ウェブで動作するClaimsResponse(少なくとも私はそう思います)について少し知っています。 AXFetchAsSregTransformを有効にするための構成構成、ClaimsRequestを使用してDemandLevel.RequireでGoogleメールを取得する方法。私がやろうとしている のは、nugetパッケージではなく、プロジェクトへの単一の参照として、v4.0以降の統合DotNetOpenAuth.dllライブラリでサンプル( strathwebから使用されるサンプル)を機能させることです。サンプルはバージョンDotNetOpenAuth-3.4.7.11121で動作します。誰かがこの問題に関する情報を教えてくれれば幸いです。リクエストを作成してDotNetOpenAuth.dllv3.4.7を使用すると、すべてうまくいきます。

public IAuthenticationRequest ValidateAtOpenIdProvider(string openIdIdentifier、Realm realm、Uri returnurl)

{{

IAuthenticationRequest openIdRequest = openId.CreateRequest(Identifier.Parse(openIdIdentifier)、realm、returnurl);

        var fields = new ClaimsRequest()
        {
            Email = DemandLevel.Require,
            FullName = DemandLevel.Require,
            Nickname = DemandLevel.Require
        };
        openIdRequest.AddExtension(fields);

        return openIdRequest;
    }

そして、ユーザーをサービスプロバイダーにリダイレクトします。

var response = openidemembership.ValidateAtOpenIdProvider(identifier、realm、new Uri( "DomainUrl or Localhost / GoogleCallback"));

        if (response != null)
        {
            return response.RedirectingResponse.AsActionResult();
        }

ユーザーがリダイレクトされた後、これら2つのメソッドが呼び出されます。

public OpenIdUser GetUser(){

        OpenIdUser user = null;
        IAuthenticationResponse openIdResponse = openId.GetResponse();

        if (openIdResponse.IsSuccessful())
        {
            user = ResponseIntoUser(openIdResponse);
        }

        return user;
    }

private OpenIdUser ParseResponse(IAuthenticationResponse response){

        OpenIdUser user = null;
        var claimResponseUntrusted = response.GetUntrustedExtension<ClaimsResponse>();
        var claimResponse = response.GetExtension<ClaimsResponse>();
                  if (claimResponse != null)
        {
            user = new OpenIdUser(claimResponse, response.ClaimedIdentifier);
        }
        else if (claimResponseUntrusted != null)
        {
            user = new OpenIdUser(claimResponseUntrusted, response.ClaimedIdentifier);
        }

        return user;
    }

コントローラの内部:

public ActionResult GoogleCallback(){

        var user = openidemembership.GetUser();
        if (user != null)
        {
            //Create cookie and redirect the user back 
            return new RedirectResult(Request.Params["ReturnUrl"] ?? "/");
        }

        return View();
    }

Web.Config

 <section name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection" requirePermission="false" allowLocation="true" />

<dotNetOpenAuth>
    <openid>
      <relyingParty>
        <behaviors>
          <add type="DotNetOpenAuth.OpenId.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth" />
        </behaviors>
      </relyingParty>
    </openid>
  </dotNetOpenAuth>

DotNetOpenAuth.dll v4.0 +++を使用した後でも、ParseResponseメソッド呼び出し内でClaimsResponseから値を取得できません。そして、私は名前空間DotNetOpenAuth.OpenId.Extensions.SimpleRegistrationを使用しています。nugetではすべて問題ありませんが、単一のdllで機能させる方法は他にあります。nugetからのすべての参照を、現在顧客の1人のために取り組んでいる既存のプロジェクトに追加するつもりはありません。ありがとうございます。事前にあなた。

4

1 に答える 1

0

を使用するようにweb.configファイルを更新しますDotNetOpenAuth.OpenId.RelyingParty.Behaviors.AXFetchAsSregTransform。(「RelyingParty」を追加するための名前空間の変更に注意してください。v4.xでは、DotNetOpenAuthは、マルチアセンブリビルドをサポートするために動作の名前空間を移動し、統合アセンブリバージョンにも影響を与えました。

<dotNetOpenAuth>
    <openid>
      <relyingParty>
        <behaviors>
          <add type="DotNetOpenAuth.OpenId.RelyingParty.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth" />
        </behaviors>
      </relyingParty>
    </openid>
  </dotNetOpenAuth>

また、統合アセンブリが必要な場合でも、NuGetを使用してDotNetOpenAuthを取得できます。

インストールパッケージDotNetOpenAuth.Ultimate

于 2013-01-15T04:10:59.027 に答える