0

Windows Azure クラウドで既に実行されている Asp.net mvc4 プロジェクトがあります。しかし、これまでのところ、ユーザー管理機能はありません。誰でもログインできます (私は Windows Live シングル サインオンを使用しています)。しかし今、最も単純な役割ベースの認証を行う必要があります。

1.ユーザーロール(管理者、ユーザー、コンテンツ管理者)を登録したい/手動でできる。2.ログイン時にロールに基づいてユーザーを認証する必要があります。

誰でも私にヒントを与えたり、明確なチュートリアルにリンクしたり、アイデアを提案したりできますか?

4

4 に答える 4

3

最も簡単な方法は、実際には、ACS によって発行されたトークンに「ロール」クレームを追加することです。現時点ではこれを手動で行っても問題ないと言ったので、ACS ポータルを使用してこれらのルールを作成します。

アプリでは、ロールを含む「Authorize」属性でアクションを装飾するなど、通常のことを行います。

[Authorize(Roles="Administrator")]
public ActionResult Index()
{
  var b = User.IsInRole("Manager");
...
}

"Role" クレーム タイプを使用する限り、すべてが機能します。(これはカスタマイズすることもできますが、この方法ですぐに使用できます)。

唯一の課題は、LiveID によるものです。LiveID は一意の識別子を提供します。その識別子を既知のユーザー (電子メールや名前など) にマッピングする方法が必要です。通常、これには 2 段階のプロセスが必要です。最初に認証して一意の ID を取得し、次にユーザーにその情報を尋ねて検証します (たとえば、電子メールを送信することによって)。

他の ID プロバイダーを使用すると、この問題は発生しません。これらのプロバイダーはすべて、電子メールと名前を提供するからです。

上記のルールを書くのは、次のように簡単です。

  • メール: joy@mail.com -> 役割: 管理者
  • メール: someone@mail.com -> 役割: マネージャー ...

より多くのユーザーまたはより多くのルールがある場合、ポータルは実用的でなくなることが多く、何か他のものが必要になります (たとえば、アプリから API を使用する、スクリプトを使用する、auth10などのツールを使用するなど)。

于 2012-08-14T14:38:50.610 に答える
1

私のプロジェクトでそれを解決した方法はClaimsAuthenticationManager、ユーザーの役割をそこに追加して、そこに ID を追加することでした。

namespace Claims
{
  public class RoleClaimsAuthenticationManager : ClaimsAuthenticationManager

    public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal)
    {
        if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated)
        {
            var identity = (ClaimsIdentity)incomingPrincipal.Identity;
            var roles = getRolesForIdentity(identity); //Get the roles for your identity here
            foreach (var r in roles)
            {
                 identity.AddClaim(new Claim(ClaimTypes.Role, r.Name));
            }
        }

        return base.Authenticate(resourceName, incomingPrincipal);
    }
}

次に、system.identityModel -> identityConfigurationセクションの構成でそれを接続します

<claimsAuthenticationManager type="Claims.RoleClaimsAuthenticationManager, Claims" />
于 2012-09-03T21:46:51.157 に答える
0

お気付きかもしれませんが、ACS は承認ではなく認証を処理するため、自分で処理する必要があります。

最も簡単な方法は、新しいユーザーが接続するたびにアプリケーションで「プロファイル」を作成することです。特定のユーザーのプロファイルを作成するときは、ID プロバイダーとそのユーザーの名前をプロファイルと共に保存する必要があります。この情報を保存すると、そのユーザーが次に接続したときにそのユーザーのプロファイルを取得できます (この情報はクレームから取得しますが、これは ACS の構成方法によって異なります)。

完全に機能する例については、BlobShareアプリケーションのソース (認証と承認を使用) を参照してください。

于 2012-08-14T13:44:27.073 に答える
0

ACS 以外のオプションは、メンバーシップ サービスです。

会員紹介

メンバーシップ サービスを使用すると、認証と承認の両方を利用できます。メンバーシップにはロールがあり、web.config でロールを使用することもできます。

ACS は悪い選択肢ではありません。別のオプションを提示しているだけです。

于 2012-08-14T15:47:10.223 に答える