2009-02-27 26 views
7

ユーザーが自分のサイトで認証が必要なリンクをクリックすると、ブラウザはログインページにリダイレクトされます。ログインページには、returnUrlクエリーストリングパラメータが含まれています。問題は、ユーザーがOpenIDを使用して認証する場合、プロバイダはユーザーをログインページにリダイレクトし、tryUpページの代わりにホームページにユーザーをリダイレクトするので、退屈なreturnUrlパラメータは含まれないということです。OpenIDのReturnUrlはどのように変更できますか?

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

答えて

11

本当に簡単です、ブルーノただ、ログインページにreturnurl引数を保存し、必要な動作を取得するためにDotNetOpenIdを教えてくれます

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

を呼び出します。私は結果を処理するものからログインページを表示するURLを分けることについてFranciに同意しなければなりません。 が適切であるASP.NET MVCサイトの場合、ASP.NET Webフォームの場合、実際には行かない方法です。ユーザーにエラーを表示するだけでなく、ログインフォームも表示する必要があります。再び。 DotNetOpenIdライブラリは、ロジックを分離する限り、あなたのために大変な作業をします。そのため、コードビハインドのページにはロジックがほとんどありません。

+1

これはAddCallbackArgument ** s ** –

+0

になります。ありがとうございます。私は私の答えを訂正しました。 –

+0

それほど単純ではありません: "コールバック引数は、IRelyingPartyAssociationStoreがOpenIdRelyingPartyに提供されている場合にのみサポートされます。" – Perry

3

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

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

は例です:

私のASP.NET MVCアプリケーションでは、私は、ログイン要求を処理AuthenticateアクションとUserコントローラを持っています。

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

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

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

+0

私はそれをあなたと似ていましたが、プロバイダがユーザを自分の認証アクションにリダイレクトすると、returnUrlパラメータがなくなってしまいました... RedirectFromLoginPageが機能しません... – Bruno

+0

AuthenticateメソッドをクエリのreturnUrl - http:// localhost/user/authenticate?returnurl =/somepage&uid = http://myopenid.com/francip。 OpenIDプロバイダがAuthenticateメソッドに戻ると、returnUrlがクエリに再度含まれているはずです。 –

関連する問題