はい、DotNetOpenIdはiframe、MVC、Ajaxをサポートしています。ライブラリに付属し、サンプルのOpenIdAjaxTextBox
1つで使用されているコントロールは、これを示しています。何も表示するためにiframeを使用しません。それらをcheckid_immediateとともに使用して、ユーザーの操作なしで暗黙のログインを試行します。これは、OpenIDがサポートすることを意図している唯一のiframeシナリオです。
このIAuthenticationRequest.RedirectToProvider
メソッドは内部でASP.NETを呼び出しResponse.Redirect
、それ自体がをスローしますThreadAbortException
。これが、実際にはおそらく設計上機能しているにもかかわらず、失敗しているように見える理由かもしれませんが、その設計はおそらく実行しようとしていることと競合します。
やりたいことを実現するためのさまざまなアプローチがありますが、Workshop Alexがすでに提案しているように、プロバイダーのページをiframeでホストすることにはセキュリティ上の懸念があります。EFraimが言ったように、ブラウザにとにかく許可されないバグがない限り、RPがiframeのコンテンツにアクセスしたり混乱したりできるわけではありません。これに関する2つの問題は、クリックジャッキングと、フィッシングを行うようにユーザーをトレーニングしていることです。これは、RPのURLがロケーションバーにあるときにユーザーがログイン資格情報をOPに提供する可能性があるためです。これは悪いことです。
実際、主要なOPは、iframe内でアクティブ化されたときに意図的に動作を拒否するようになったため、すべてを希望どおりに動作させるための作業の後、ほとんどの顧客が機能しなくなることに失望する可能性があります。ログインします。
また、ご指摘のとおり、ポップアップウィンドウは、適切に実行されると、ユーザーフレンドリーなエクスペリエンスを維持するのに役立ちます。DotNetOpenIdを使用して、これをいくつかの異なる方法で実現できます。ライブラリに付属しているASP.NETコントロールにはこの機能が組み込まれており、コントロールにプロパティを設定するだけでアクティブ化できます。しかし、ASP.NET MVCを使用しているので(私は思う)、これを自分で行う方法は次のとおりです。
ユーザーが現在のウィンドウにPOSTするのではなく、ページの[ログイン]ボタンをクリックすると、http://yoursite.com/openid/redirect?id=userSuppliedIdentifierのようなURLで適切なサイズのポップアップウィンドウを開くJavascriptを使用します。
OpenIDコントローラーのリダイレクトアクションは、そのIDを読み取り、そのIDに対して実行し、OpenIdRelyingParty.CreateRequest
(return IAuthenticationRequest.RedirectingResponse.AsActionResult()
MVCスタイル)します。CreateRequest
OPの応答をOpenIDコントローラーの別のメソッドに戻す場合は、returnTourlに独自のURLを渡すことができることに注意してください。
アサーションが戻ってきたら、コントローラーはポップアップウィンドウを閉じるjavascriptを送信し、(必要に応じて)メインウィンドウに戻ってログインユーザーの状態を更新する必要があります。
このプロセス全体は、DotNetOpenIdに付属しているASP.NETコントロールで完全に自動化されています。残念ながら、ASP.NETMVCをASP.NETWebフォームのようにモジュール化できないため、このすべての作業を自分で行う必要はありません。もちろん、DotNetOpenIdに付属しているMVCサンプルは、将来のバージョンでポップアップ動作を行う方法を示すために作成することができます。あなたがそれを望むなら、それに対する願いを提出してください。