针对webapi的基于角色的身份验证

时间:2019-05-23 12:46:19

标签: c# .net authentication asp.net-web-api oauth

我有以下令牌生成代码,可以很好地进行身份验证而没有任何作用。我需要启用基于角色的身份验证:

public void ConfigureOAuth(IAppBuilder app)
    {
        double timeout = Convert.ToDouble(ConfigurationManager.AppSettings["Timeout"].ToString());
        OAuthAuthorizationServerOptions OAuthserverOptions = new OAuthAuthorizationServerOptions()
        {
            AllowInsecureHttp = true,
            TokenEndpointPath = new PathString("/token"),
            AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(timeout),
            Provider = new SimpleAuthorizationServerProvider()
        };

        //Token generation
        app.UseOAuthAuthorizationServer(OAuthserverOptions);
        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
    }

如何对上述代码启用基于角色的身份验证

因此,在我的Web api操作中,如果我放置Authorize(Roles =“ Admin”),则可以允许或拒绝使用角色进行访问。

请咨询。

2 个答案:

答案 0 :(得分:0)

此代码对我有用。通过身份验证后,您可以使用此代码为用户设置身份

       //Adds the user to the context
        var Identity = new GenericIdentity("Username", "Ldap");
        var principal = new GenericPrincipal(Identity, roles);
        HttpContext.Current.User = principal;

然后检查他是否已通过此其他代码验证或扮演角色:

        //checks if the user is is authenticated
        if (HttpContext.Current.User.Identity.IsAuthenticated)
        {
            //checks if the user has a role
            if (HttpContext.Current.User.IsInRole("user"))
            {

            }
        }

答案 1 :(得分:0)

您可以使用类似于以下代码的代码(假设自从执行令牌认证以来就使用api):

 public class WebApiAuthorizeAttribute : System.Web.Http.AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(HttpActionContext ctx)
    {
        //unauthorized code here
    }
    //or
    protected override bool IsAuthorized(HttpActionContext actionContext)
    {
       //is authorized
    }
}

请注意,您将如何在mvc控制器中从System.Web.Http.AuthorizeAttribute而不是System.Web.Mvc.AuthorizeAttribute继承。另外,您的HandleUnauthorizedRequest的参数将是HttpActionContext类型,而不是mvc控制器中的AuthorizationContext类型。

现在在您的API上,您可以使用[WebApiAuthorize(Roles = "role")]