我有以下令牌生成代码,可以很好地进行身份验证而没有任何作用。我需要启用基于角色的身份验证:
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”),则可以允许或拒绝使用角色进行访问。
请咨询。
答案 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")]