79

MVC5 と新しい OWIN 認証ミドルウェアを使用して、VS2013 RC のいくつかの新しい機能を試しています。

そのため、属性を使用して[Authorize]ロールごとにアクションを制限することに慣れていますが、クレーム/アクティビティ ベースの承認を使用しようとしていますが、それに相当する属性が見つかりません。

私が見逃している明らかなものはありますか、それとも自分でロールバックする必要がありますか? 箱から出してすぐに使えるものがあると思っていました。

私が具体的に探しているのは、私が推測する線に沿ったものです[Authorize("ClaimType","ClaimValue")]

前もって感謝します。

4

5 に答える 5

77

私はそれを処理するための単純な属性を書くだけになりました。追加の設定がなければ、箱から出してすぐにフレームワークに何も見つかりませんでした。以下に記載されています。

public class ClaimsAuthorizeAttribute : AuthorizeAttribute
{
    private string claimType;
    private string claimValue;
    public ClaimsAuthorizeAttribute(string type, string value)
    {
        this.claimType = type;
        this.claimValue = value;
    }
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        var user = filterContext.HttpContext.User as ClaimsPrincipal;
        if (user != null && user.HasClaim(claimType, claimValue))
        {
            base.OnAuthorization(filterContext);
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
}

もちろん、コントローラー、アクション、動詞のトリプレットを何らかの形でクレームに使用することに満足している場合は、型と値のパラメーターを削除できます。

于 2015-03-02T19:37:21.347 に答える
3
[ClaimsPrincipalPermission(SecurityAction.Demand, Operation="Delete", Resource="Customer")]
public ActionResult Delete(int id)
{
    _customer.Delete(id);
    return RedirectToAction("CustomerList");
}

ClaimsPrincipalPermissionAttribute クラス

于 2013-10-14T16:12:41.710 に答える