ユーザーが Google、Facebook、および Windows Live アカウントを使用して ASP.NET MVC Web サイトにサインインできるようにしようとしています。私は現在、Azure App Fabric ACS を使用していますが、これはほとんど簡単すぎました。問題は、メールアドレスが必要だということです。Google と Facebook は電子メールをクレームとして提供しますが、Windows Live は提供しません。LiveConnect サイトから、これは wl.basic (ユーザー名を取得するため) および wl.emails (ユーザーの電子メール アドレスを取得するため) スコープを使用して簡単に可能であるように見えますが、順番に ACS に影響を与えることはできませんでしたこの情報を取得します。また、ユーザーがサインインした後に自分のサイトから取得するために、OAuth2 Web サーバー フローを実装しようとしました。必要な情報を取得することはできましたが、FedAuth Cookie が削除されたため、サインオンの無限ループに陥りました。にリダイレクトしましたhttps://oauth.live.com/authorizeでフローを開始します。これを(サーバー側で)機能させることができた人はいますか?ACS を完全に破棄し、各プロバイダーのカスタム コードを使用してサインインを有効にするカスタム ページを提供する必要がありますか?
以前のデモ (ブログ エンジン ala smarx) をコードで改造して、独自のものを公開する必要がないようにしました。私のweb.configにFedUtilは以下を挿入しました:
<httpModules>
<add name="WSFederationAuthenticationModule" type="Microsoft.IdentityModel.Web.WSFederationAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add name="SessionAuthenticationModule" type="Microsoft.IdentityModel.Web.SessionAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</httpModules>
すべてのユーザーの拒否を削除しました
しかし、ユーザーに許可を強制する特定のアクション メソッド (新しいブログの投稿) があります。
[Authorize]
public ActionResult New()
{
var principal = Thread.CurrentPrincipal as IClaimsPrincipal;
if (principal == null)
return new HttpStatusCodeResult(403);
// if this is a Windows Live User we have more work to do
string redirectUrl = CheckForWindowsLiveUser(principal);
if (redirectUrl != null)
{
return Redirect(redirectUrl);
}
Cookie (FedAuth および FedAuth1) が最初に入力された New リクエスト内。リダイレクトが返された後、それらはなくなります。私はセッション プロバイダーに対して何もしていません (おそらくそうすべきです)。