8

おそらく以前にこれを解決したことがあります。

セッションの固定性がない環境で open id を使用できるようにする必要があります。サーバーはヘッダーを保持します。

ASP.NET MVC と dotNetOpenId バージョン 3.2.0.9177 を使用しています。サード パーティの Web サイトでの認証は問題なく行われますが、応答を返すとエラーが発生し、認証に失敗します。

何かご意見は?

4

3 に答える 3

6

ステートフル

最も最適化された方法はIRelyingPartyApplicationStore、OpenID RP が必要とする「シークレット」を実装するカスタム永続ストアを作成し、インスタンスをOpenIdRelyingParty(IRelyingPartyApplicationStore)コンストラクターに渡すか、web.config ファイルに登録することです。

ステートレス

ほとんどのシナリオで十分な、はるかに簡単なソリューションは、代わりにステートレス モードを使用することです。これにより、Web ファームのサーバー間で状態を共有する必要がなくなります。

アプリケーション ストア インスタンスとしてOpenIdRelyingParty渡すインスタンスを作成することで、ステートレス モードをアクティブ化できます。null既定のコンストラクターを呼び出すと、DNOA がそのメモリ内ストアを使用するようになり、サーバー ファームで中断されるため、既定のコンストラクターでは不十分です。

または、ASP.NET コントロールを使用している場合は、コントロールに設定するだけStateless = trueです。

于 2009-09-04T21:31:34.707 に答える
5

ステートレスモードを有効にする方法は次のとおりです。

var uri = new Uri(Request.Url, Request.RawUrl);
var openid = new OpenIdRelyingParty(null, uri, 
             Request.HttpMethod == "GET" ? Request.QueryString : Request.Form);

Andrewによると、パフォーマンスにわずかな影響がありますが、これまでのところ機能しているようです。ログインは非常にまれなアクティビティであるため、それが重要かどうかはわかりません。

于 2009-10-15T18:21:25.977 に答える
1

DotNetOpenID を使用すると、Cookie を介してクライアントへの認証中に必要な状態を保持できるはずです。

編集:セッションのない環境で DotNetOpenID を使用する必要がなかったため、このためのサンプル コードはありませんが、このリンクを確認すると、必要な情報が提供される場合があります: http://code. google.com/p/dotnetopenid/wiki/WebFarmHowto

于 2009-09-04T14:32:31.993 に答える