具有基于角色的授权的ASP.NET Web Api

德纳农

我将Web API 2与基于OWIN令牌的身份验证一起使用。唯一不起作用的是基于角色的授权。

在我的AuthorizationServerProvider.GrantResourceOwnerCredentials的实现中,这是我分配角色的方式:

identity.AddClaim(client.ApplicationType == ApplicationTypes.WebClient
            ? new Claim(ClaimTypes.Role, "user")
            : new Claim(ClaimTypes.Role, "admin"));

但是在使用[Authenticate(Roles =“ user”)]的Controller中,它只会向客户端返回一条“拒绝授权”消息。我检查了变量,这是里面的内容在此处输入图片说明

因此角色似乎在那里,但是user.Claims为空,IsInRole(“ user”)也返回负数。

我在这里发现了一些有关stackoverflow和逻辑方面的问题,我看不到我错过的内容。我唯一想到的就是覆盖Authorize Command,但这是不必要的,因为基于角色的授权似乎已经集成了...

编辑:这是我的工作方法看起来像:

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
    var allowedOrigin = context.OwinContext.Get<string>("as:clientAllowedOrigin") ?? "*";
        context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin });

    Client client;
    using (var repo = new AuthRepository())
    {
        client = repo.FindClient(context.ClientId);
        if (client.ApplicationType != ApplicationTypes.Service)
        {
            var user = await repo.FindUser(context.UserName, context.Password);

            if (user == null)
            {
                context.SetError("invalid_grant", "The user name or password is incorrect." + context.UserName);
                return;
            }
        }
}
Vi100

不要直接添加角色声明,而是使用UserManager:

UserManagerInstance.AddToRole(userId, "admin");

这样,角色将被保留(保留到AspNetUserRoles或您配置的任何对象),以便以后的请求可以使用。如果直接添加声明,则不会发生这种情况,因为您是将声明添加到用户身份的“实例”中,该实例将随当前请求一起消失。

回答您的更多要求:

如果您希望将索赔要求编入票证,则必须在按照自己的方式添加索赔要求之后执行此操作(在GrantResourceOwnerCredentials中):

var props = new AuthenticationProperties(new Dictionary<string, string>
        {
            { "userId", "blah,blah" },
            { "role", "admin" }
        });

var ticket = new AuthenticationTicket(identity, props);
context.Validated(ticket);

这样,您就不必“坚持”这类用户

当然,您将必须重写OAuthAuthorizationServerProvider的TokenEndpoint方法,以便在以后的请求/响应中检索这些数据。

    public override Task TokenEndpoint(OAuthTokenEndpointContext context)
    {
        foreach (KeyValuePair<string, string> property in context.Properties.Dictionary)
        {
            context.AdditionalResponseParameters.Add(property.Key, property.Value);
        }

        return Task.FromResult<object>(null);
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET Web API中基于角色的授权-如何在主体上设置角色?

来自分类Dev

ASP.NET Core 3.1 Web API基于角色的授权不起作用

来自分类Dev

ASP.NET Core Web API和角色授权

来自分类Dev

带有Postman的ASP.NET Web API授权

来自分类Dev

在ASP.NET MVC Web API服务和MVC客户端体系结构中实现身份验证和基于角色的授权

来自分类Dev

具有身份和ExternalLogin的ASP.NET Core 3.1中基于角色的授权

来自分类Dev

具有Azure AD的Asp.net核心基于MVC角色的授权

来自分类Dev

ASP.NET核心Web API:基于数据库权限的授权

来自分类Dev

具有COM对象的ASP.NET CORE WEB API

来自分类Dev

是否可以在没有 web.sitemap 的情况下进行基于 ASP.NET 角色的表单身份验证和授权?

来自分类Dev

角色与声明授权使用WIF和OWIN中间件的Asp.net Web API-2

来自分类Dev

调用现有服务的新网站的最佳架构(具有身份验证和授权的 ASP.NET Web API)

来自分类Dev

缓存Asp .Net Web API

来自分类Dev

ASP.NET Web API授权过滤器

来自分类Dev

ASP.NET Web API授权令牌提前过期

来自分类Dev

Facebook取消授权ASP.NET Web API

来自分类Dev

有关授权令牌的信息存储在ASP.NET WEB API服务器上?

来自分类Dev

ASP.NET MVC授权具有多个角色的用户

来自分类Dev

具有基于自定义角色的授权的ASP.Net Core 3.0 Windows身份验证

来自分类Dev

使用基于ASP.NET身份令牌的身份验证在每个Web Api请求中授权声明

来自分类Dev

使用ASP.NET Web API 2和Owin的基于令牌的身份验证会抛出401未经授权

来自分类Dev

asp.net中基于角色的授权

来自分类Dev

ASP.NET MVC + API和WCF具有针对自定义数据库和活动目录的基于声明的授权和身份验证

来自分类Dev

Asp.net Web Api控制器操作通过Web配置设置授权

来自分类Dev

装饰ASP.NET Web API IHttpController

来自分类Dev

ASP.net MVC Web API + Android

来自分类常见问题

从ASP.NET Web API返回HTML

来自分类Dev

视图中的ASP.NET Web Api

来自分类Dev

ASP.NET Web API操作缓存

Related 相关文章

  1. 1

    ASP.NET Web API中基于角色的授权-如何在主体上设置角色?

  2. 2

    ASP.NET Core 3.1 Web API基于角色的授权不起作用

  3. 3

    ASP.NET Core Web API和角色授权

  4. 4

    带有Postman的ASP.NET Web API授权

  5. 5

    在ASP.NET MVC Web API服务和MVC客户端体系结构中实现身份验证和基于角色的授权

  6. 6

    具有身份和ExternalLogin的ASP.NET Core 3.1中基于角色的授权

  7. 7

    具有Azure AD的Asp.net核心基于MVC角色的授权

  8. 8

    ASP.NET核心Web API:基于数据库权限的授权

  9. 9

    具有COM对象的ASP.NET CORE WEB API

  10. 10

    是否可以在没有 web.sitemap 的情况下进行基于 ASP.NET 角色的表单身份验证和授权?

  11. 11

    角色与声明授权使用WIF和OWIN中间件的Asp.net Web API-2

  12. 12

    调用现有服务的新网站的最佳架构(具有身份验证和授权的 ASP.NET Web API)

  13. 13

    缓存Asp .Net Web API

  14. 14

    ASP.NET Web API授权过滤器

  15. 15

    ASP.NET Web API授权令牌提前过期

  16. 16

    Facebook取消授权ASP.NET Web API

  17. 17

    有关授权令牌的信息存储在ASP.NET WEB API服务器上?

  18. 18

    ASP.NET MVC授权具有多个角色的用户

  19. 19

    具有基于自定义角色的授权的ASP.Net Core 3.0 Windows身份验证

  20. 20

    使用基于ASP.NET身份令牌的身份验证在每个Web Api请求中授权声明

  21. 21

    使用ASP.NET Web API 2和Owin的基于令牌的身份验证会抛出401未经授权

  22. 22

    asp.net中基于角色的授权

  23. 23

    ASP.NET MVC + API和WCF具有针对自定义数据库和活动目录的基于声明的授权和身份验证

  24. 24

    Asp.net Web Api控制器操作通过Web配置设置授权

  25. 25

    装饰ASP.NET Web API IHttpController

  26. 26

    ASP.net MVC Web API + Android

  27. 27

    从ASP.NET Web API返回HTML

  28. 28

    视图中的ASP.NET Web Api

  29. 29

    ASP.NET Web API操作缓存

热门标签

归档