1

Azure ACS を使用するこのガイドの手順に従って、Azure ACS サービスを構成し、Facebook を介して認証し、開発サーバーで実行されている Web サイトにリダイレクトします。

認証が成功すると、Azure ACS はローカル開発 Web サイトにリダイレクトされ、IsAuthenticated フラグは true になりますが、要求からの電子メールがローカル データベースにも存在する場合にのみ、IsAuthenticated フラグを true に設定したいと考えています。カスタム メンバーシップ プロバイダー。請求からの電子メールが存在しない場合、クライアントを登録ページにリダイレクトしたいと考えています。登録して認証したら、IsAuthenticated フラグを true に設定したいと思います。

現在、Facebook と AzureACS で一度認証されると、ユーザーは、既定の IsAuthenticated フラグが true であるため、アカウントが存在しない場合でも、ViewAccountBalance.aspx などのセキュリティで保護されたページを要求できます。他の人が何をしたか、ベスト プラクティスは何かを聞くことに興味があります。

4

2 に答える 2

0

Sandrinoは正しいです。ロールベースの承認(またはより一般的には、クレームベースの承認)を使用できます。デフォルトでは、ACSはIDプロバイダーによって発行されたクレームを証明書利用者に返すだけです。Facebookの場合は、メールによる申し立てが返されます。ただし、追加のルールを作成するようにACSを構成できます。たとえば、特定のユーザーを、値が管理者であるロールにマップできます。その後、ACSはこの役割の主張を証明書利用者に返します。次に、Sandrinoの提案を使用して、役割ベースの承認を使用できます。詳細については、 http://msdn.microsoft.com/en-us/library/windowsazure/gg185915.aspxを参照することもできます。

于 2012-04-18T09:40:53.567 に答える
0

認証と承認を明確に区別する必要があります。ユーザーは Facebook 経由でログインしたので、認証されたことを意味します (ユーザーが誰で、どこから来たかを知っています)。

ここで、特定の条件に基づいてアプリケーションの一部を制限したい場合は、実際には承認について話していることになります。役割を単純な HttpModule と組み合わせることを検討してください。例: HttpModule は、ユーザーが閲覧しているページを確認できます。ユーザーがアクティブなプロファイルを必要とするページにアクセスする場合は、次のコードを使用できます。

public class RequiresProfileHttpModule : IHttpModule
{
    public void Dispose()
    {

    }

    public void Init(HttpApplication context)
    {
        context.AuthorizeRequest += new EventHandler(OnAuthorize);
    }

    private void OnAuthorize(object sender, EventArgs e)
    {
        HttpApplication app = sender as HttpApplication;
        if (app.Request.Url.ToString().Contains("bla") && !app.Context.User.IsInRole("UsersWithProfile"))
            app.Response.Redirect("http://myapp/register.aspx");
    }
}

面倒を見る必要がある唯一のことは、プリンシパルを更新して、ユーザーが電子メール アドレスを入力した場合にロール UsersWithProfile があることを確認することです。

これは、考えられる多くの解決策の 1 つにすぎません。ASP.NET MVC を使用している場合は、グローバル ActionFilters で同じ結果を得ることができます。または、IClaimsPrincipal を操作することもできます (ユーザーがプロファイルを持っている場合はクレームを追加します)。

于 2012-04-18T08:55:23.040 に答える