7

ユーザーが認証を必要とする私のサイトのリンクをクリックすると、ブラウザーはログインページにリダイレクトされます。ログインページには、returnUrlクエリ文字列パラメータが含まれています。問題は、ユーザーがOpenIDを使用して認証する場合、プロバイダーはユーザーをログインページにリダイレクトし、returnUrlパラメーターを含めないことです。これは、試行されたページではなくホームページにユーザーをリダイレクトするため、かなり退屈です。 。

DotNetOpenIDを使用していますが、これを修正する方法はありますか?

4

2 に答える 2

11

とても簡単です、ブルーノ。電話するだけ

IAuthenticationRequest.AddCallbackArguments("returnUrl", Request.QueryString["returnUrl"]);

これにより、DotNetOpenId は、ログイン ページで returnUrl 引数を保持し、必要な動作を得ることができます。ログインページを表示する URL を結果を処理する URL から分離することに関して、私は Franci に同意しません。ASP.NET MVC サイトの場合は適切かもしれませんが、ASP.NET Web フォームの場合は、ユーザーにエラーを表示するだけでなく、ログイン フォームを再度表示することも間違いなく必要になるため、これは適切ではありません。さらに、ロジックの分離に関しては、DotNetOpenId ライブラリがすべての面倒な作業を行うため、コード ビハインド ページにはほとんどロジックがありません。

于 2009-03-04T20:47:51.970 に答える
3

OpenID プロバイダーが別の URL に戻るようにするOpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl)場合は、認証要求を作成するときにメソッドを使用する必要があります。

ただし、通常、OpenID プロバイダーが、アプリ内でログイン シーケンスを開始した URL にリダイレクトされることは望ましくありません。応答を適切に処理するために、OpenID 認証を開始した時点に戻る必要があります。アプリの残りのロジックから OpenID レイヤーをカプセル化するのに役立ちます。

次に例を示します。

私の ASP.NET MVC アプリには、ログイン要求を処理Userするアクションを持つコントローラーがあります。Authenticate

アクションAuthenticateチェック. OpenIdRelyingParty.Responseの場合null、アクションは を呼び出しますRedirectToProvider。プロバイダーは同じアクションに戻りますRespons.Status。ユーザーがログイン シーケンスを開始したページに戻るためAuthenticationStatus.Authenticatedに使用する場合。FormsAuthentication.RedirectFromLoginPage(openid.Response.ClaimedIdentifier, true)

ただし、ステータスがAuthenticationStatus.Failed「AuthenticationStatus.Canceled」または「AuthenticationStatus.Canceled」の場合は、この問題を解決するための手順をユーザーに提供できます。入力ミスの場合は OpenID を修正するか、代わりにユーザー名/パスワードでログインするように提案できます。(同じ ID に対して OpenID とユーザー名/パスワード認証の両方をサポートしています)

私のログインボックスはすべてのページにあります。OpenID プロバイダーがログイン要求を開始したページにリダイレクトした場合、そのページは失敗を適切に処理できない可能性があります。

于 2009-02-27T16:56:40.320 に答える