MVS5と新しいOWIN認証ミドルウェアを使用して、VS2013 RCの新しいものをいくつか試しています。
そのため、_[Authorize]
_属性を使用してアクションをロールごとに制限することに慣れていますが、クレーム/アクティビティベースの承認を使用しようとしていますが、同等の属性が見つかりません。
紛失している明らかなものはありますか、それとも自分で転がす必要がありますか?すぐに使えるようになると思っていました。
私が特に探しているのは、[Authorize("ClaimType","ClaimValue")]
の行に沿ったものです。
前もって感謝します。
私はそれを処理する単純な属性を書くことになりました。余分な設定がなければ、フレームワーク内ですぐに何かを見つけることはできませんでした。以下に記載されています。
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);
}
}
}
もちろん、クレームにcontroller-action-verb tripletを使用することに満足している場合は、タイプと値のパラメーターを削除できます。
私のバージョンはこちらです: http://leastprivilege.com/2012/10/26/using-claims-based-authorization-in-mvc-and-web-api/
クレームを使用して、ロールとユーザーでAuthorization属性を引き続き使用できることがわかりました。
これが機能するには、ClaimsIdentityに2つの特定のクレームタイプを含める必要があります。
_ ClaimTypes.Name
_
そして
_ ClaimTypes.Role
_
次に、OAuthAuthorizationServerProviderから派生したクラスで、使用するGrantXXメソッドで、ClaimsIdentityを作成するときに、これら2つのクレームを追加します。
例:
_ var oAuthIdentity = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, context.ClientId),
new Claim(ClaimTypes.Role, "Admin"),
}, OAuthDefaults.AuthenticationType);
_
その後、任意のアクションで[Authorize(Roles ="Admin")]
を使用してアクセスを制限できます。
[ClaimsPrincipalPermission(SecurityAction.Demand, Operation="Delete", Resource="Customer")]
public ActionResult Delete(int id)
{
_customer.Delete(id);
return RedirectToAction("CustomerList");
}