Owin授权否认角色

时间:2016-07-01 08:38:25

标签: c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api

我最近加入了一个项目团队,其任务是为项目的后端设置用户角色。 它使用ASP.NET C#WebApi和Owin。 我的问题是,当我为Controller方法分配一个属性时:

[Authorize(Roles = "Admin")]

此请求的响应始终是“已拒绝授权”。 但是如果我只是使用:

[Authorize]

有效。 请注意,我正在使用已分配Admin of Admin的用户登录。

我注意到这个问题类似于:Authorization roles WebAPI oauth owin

然而,似乎他们在startup.cs中的代码在某种程度上是不同的,否则我正在努力正确地遵循答案。

我必须使用的startup.cs中的代码是:

public void Configuration(IAppBuilder app)
{
    // configure OAuth
    ConfigureOAuth(app);

    // configure Mvc
    HttpConfiguration config = new HttpConfiguration();
    WebApiConfig.Register(config);
    app.UseWebApi(config);
}

public void ConfigureOAuth(IAppBuilder app)
{
    OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
    {
        AllowInsecureHttp = true,
        TokenEndpointPath = new PathString("/token"),
        AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
        Provider = new SimpleAuthorizationServerProvider()
    };

    // Token Generation
    app.UseOAuthAuthorizationServer(OAuthServerOptions);
    app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}

我需要在这里添加其他内容以允许角色,还是应该在代码中的其他位置添加。 我对ASP.NET C#MVC或WebApi并不完全熟悉,我们非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

$(document).ready(function() { $("#button").click(function(){ alert("hello"); var a = $("textarea").val(); var b = $("#search").val(); var c = $("textarea").length; var d = $("#search").length; var array = []; var st = ""; for(var e=0;e<c;e++) { for (var f=0;f<d;f++) { if(a[e+f] === b[f]) { alert(a[e+f]); array.push(a[e+f]); if (array.length === d) { for(var g in array) { st += array[g]; } a.substr(e,e+f).replaceWith("vinh"); break; } } else { break; } } } }); });

你有像SimpleAuthorizationServerProvider

这样的方法
GrantResourceOwnerCredentials

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { await Task.Run( () => { ...logging logic... var loginResult = authRepository.Login(context.UserName, context.Password); if (!loginResult.Success) return; ...logging logic... var claims = new List < Claim > (); claims.add(new Claim(ClaimTypes.Role, loginResult.Role)); < --here var id = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ExternalBearer); context.Validated(id); }); } 是您的存储库/ DAL层返回的内容