标签: authorization

验证 API 密钥和 JWT 令牌是微服务的责任吗?

我的微服务将以两种方式调用: 1. 由公共网站的未经身份验证的用户调用。2. 通过内部 UI 的经过身份验证的用户来执行管理功能。

我计划使用 OIDC 和 JWT 令牌来验证管理员用户从管理 UI 发出的 API 调用。该令牌中将包含声明,微服务将使用该声明来确定用户是否有权访问此 API。

我计划使用面向公众的网站上的 API 密钥来进行未经身份验证的用户进行的 API 调用。微服务将验证 API 请求标头中的 API 密钥,以确定 API 调用是否来自可信来源。

问题

  • 这是处理身份验证和授权的正常/可接受的方式吗?
  • 微服务有责任评估 JWT 令牌和 API 密钥吗?每个微服务都必须在我的设计中做到这一点。

authentication authorization api-key jwt microservices

1
推荐指数
1
解决办法
1013
查看次数

无法将存储管理员角色添加到 GCP 服务帐号

我正在查看 GCP 控制面板中的 IAM 服务帐户选项卡。我正在编辑服务帐户。我单击“授予访问权限”,输入我正在创建的服务帐户的电子邮件,并尝试添加存储管理员。

IAM 服务账户选项卡

但是,列表中没有这样的选项。

在列表中找不到“存储管理员”

此外,通过 CLI 执行此操作的看似等效的尝试失败了:

gcloud projects add-iam-policy-binding my-project-id \
  --member='serviceAccount:github-actions@my-project-id.iam.gserviceaccount.com' \
  --role='projects/my-project-id/roles/storage.admin'

ERROR: Policy modification failed. For a binding with condition, run "gcloud alpha iam policies lint-condition" to identify issues in condition.
ERROR: (gcloud.projects.add-iam-policy-binding) INVALID_ARGUMENT: Role (projects/my-project-id/roles/storage.admin) does not exist in the resource's hierarchy.
Run Code Online (Sandbox Code Playgroud)

显然,我无法理解服务帐户应该如何被授予角色。

authorization role-base-authorization google-cloud-storage google-cloud-platform google-iam

1
推荐指数
1
解决办法
2526
查看次数

ABAC 与 Monorepo 微服务:最好的方法是什么?

在我的工作中,我的任务是搜索并找到解决方案,以在 monorepo 中组织的微服务中实施 ABAC 授权。我们有一些产品,我们使用领域的概念在同一数据库中组织不同客户端的数据。我们的要求可能是:

  • 用户(即其公司的经理)只能看到来自您公司和您员工的数据。
  • 同一个公司可以有N个地方,每个地方可以有一个经理。每个地方的管理者只能看到那里的数据。

首先,我想构建一些代码,供每个 API 的每个路由器使用,以验证授权并允许或拒绝请求。像这样的东西: 在此输入图像描述

我想到的另一件事是创建一个 API 而不是 lib。 在此输入图像描述

因此,基于这个问题,我发现 ABAC 可以从应用程序(API)中外部化,并且对我来说很有意义,请参见下图。

在此输入图像描述

但接下来我有一些问题。

  1. 按照我在第一张图片或第二张图片中的想法去做是不好的吗?

  2. PDP 如何知道用户想要做什么?根据他呼叫的路线?但通过这种方法,单一责任将会受到损害,因为 PDP 需要内化(步骤 2)其他应用程序的行为,对吧?

  3. PIP需要调用数据库来让PDP验证授权。因此,这可能会很慢,因为相同的查询将执行两次,一次用于检查策略,另一次在服务内部使用业务逻辑。

authorization microservices abac monorepo

1
推荐指数
1
解决办法
383
查看次数

带有 Ory Keto 的 RBAC 和对象所有权

我试图通过 Ory Keto 实现以下几点:

  1. UserA拥有ProductA-> 所有权赋予一项 CRUD 权利。
  2. UserB具有角色Admin->Admin赋予一个对所有事物的 CRUD 权限。
  3. UserA具有角色KYCVerified或属于名为KYCVerified-> 的组的一部分,这为用户提供了额外的权限。

第 1 点描述了所有权的概念,根据 Ory Keto 的当前状态,将其描述为 RBAC 的缺点之一(来源):

不存在所有权概念:Dan 是文章“Hello World”的作者,因此可以更新它。

第 2 点描述了一个基本上通过了所有权检查的角色,因为这个角色可以做所有事情。这在当前状态下应该是可能的,但不能与第 1 点结合使用。

第 3 点描述的内容与第 2 点基本相同,但这更针对我的用例。

我在Ory网站上读过这篇文章和这篇文章。然而,我仍然无法理解这个概念。我举了以下例子来说明我如何看待 Ory Keto 的所有权概念:

# Tenant TenantA needs to be a owner of product ProductA in order to view it
products:ProductA#view@(tenants:TenantA#owner)

# Tenant A is a owner of ProductA …
Run Code Online (Sandbox Code Playgroud)

authorization rbac ory

1
推荐指数
1
解决办法
1362
查看次数

使用已指定的身份验证方案集成测试授权端点

我正在尝试使用授权端点为 ASP.NET Web API 设置集成测试。

我已按照 Microsoft 的文档将模拟身份验证添加到集成测试中,以允许测试客户端访问授权端点。https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-6.0

例如

builder.ConfigureTestServices(services =>
{
    services.AddAuthorization(options =>
    {
        options.DefaultPolicy = new AuthorizationPolicyBuilder()
            .AddAuthenticationSchemes("Test")
            .RequireAuthenticatedUser()
            .Build();
    });
}
Run Code Online (Sandbox Code Playgroud)

如果您使用的是默认身份验证方案,则可以很好地工作,您可以在集成测试启动时更改该方案以使用测试方案。但是,我的授权端点正在使用指定的AuthenticationSchemes,因此测试方案永远不会被端点授权。例如

[Authorize(AuthenticationSchemes = "Scheme1,Scheme2")]
public class AppVersionController : ControllerBase
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我可以通过在测试时指定环境变量、检查它并将测试方案动态添加到授权端点来解决这个问题。然而,这为应用程序添加了许多特定于测试的逻辑,这在主项目中并不好。

这会起作用:

// Test scheme added dynamically from an environment variable to get the below result
[Authorize(AuthenticationSchemes = "Scheme1,Scheme2,Test")]
public class AppVersionController : ControllerBase
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我通过创建一个自定义属性来完成此操作,该属性基本上如下所示:

public class AuthorizeAll : AuthorizeAttribute
{
    public AuthorizeAll()
    {
        var authenticationSchemes = "Scheme1,Scheme2"; …
Run Code Online (Sandbox Code Playgroud)

c# integration-testing authorization asp.net-core-webapi .net-6.0

1
推荐指数
1
解决办法
2084
查看次数

将 jwt 访问令牌存储在 httpOnly cookie 中是否安全?

我观看了一个指南,其中作者将访问令牌存储在 localStorage 中,然后他将访问令牌作为授权标头,并通过 axios 拦截器在每个请求中使用值“Bearer accessToken”。但我想知道为什么不像我们使用刷新令牌那样将访问令牌存储在 httpOnly cookie 中。如果有的话会出现什么问题?

security authentication authorization jwt

1
推荐指数
1
解决办法
2270
查看次数

什么是限制访问我的网页的HTML代码?

我有一个关于HTML的问题.我知道有这种机制不允许用户直接访问网页,除非他们输入密码和名称.什么是HTML代码?

html authorization

0
推荐指数
1
解决办法
161
查看次数

在CanCan能力结果中设计"current_user"方法时出现"未定义方法"错误

我正在尝试在我的rails3 + mongoid应用程序中使用具有CanCan角色的Devise授权.现在我必须限制用户编辑事件的权限,因此只有他们的作者可以这样做.该事件的作者由该行确定:

    <%= f.hidden_field (:author, :value =>current_user.email) %>
Run Code Online (Sandbox Code Playgroud)

所以,现在在CanCan的Ability文件中我正在尝试使用此代码:

  class Ability  
  include CanCan::Ability 

  def initialize(user)  
    user ||= User.new    
    if user.role? :admin  
      can :manage, :all  
    else 
        can :read, :all  
      end
      if
        user.role?(:normal)
        can :create, Event  
        can :update, Event do |event|  
          event.try(:author) == current_user.email
      end 
        can :create, Comment  
        can :update, Comment do |comment|  
        comment.try(:author) == current_user.email 
      end 
    end 
  end
Run Code Online (Sandbox Code Playgroud)

结束

但这导致了我的错误:

未定义的局部变量或方法`current_user'for#

然后我试着改变

can :update, Event do |event|  
          event.try(:author) == current_user.email
Run Code Online (Sandbox Code Playgroud)

event.try(:author) == Devise.current_user.email
Run Code Online (Sandbox Code Playgroud)

但这导致了这个错误

设计的未定义方法`current_user':模块

那么,我应该怎么做以及如何从ability.rb中调用`current_user'方法?提前感谢您的任何提示.

authorization ruby-on-rails devise ruby-on-rails-3

0
推荐指数
1
解决办法
3734
查看次数

在CanCan中跳过一个rails操作

我有一个带有一些常规方法的用户控制器.我的ability.rb已设置但我需要未登录的用户才能处理这一操作.我已经在我的ability.rb中为未登录的用户尝试了以下所有内容,但它没有任何区别......我仍然收到未经授权的错误.

can :create, User
can :update, User
can :edit, User
can :modify, User
Run Code Online (Sandbox Code Playgroud)

接下来我尝试在我的ability.rb中创建一个条目

can :do_this_action, User
Run Code Online (Sandbox Code Playgroud)

并将其放在用户控制器中

authorize!(:can_do_this_action, User.new || @user)
Run Code Online (Sandbox Code Playgroud)

仍然没有运气..

最后,我试图跳过这个动作.我在用户控制器中用它做了这个:

skip_authorization_check :only => [:create, :new, :custom_method ]
authorize_resource
Run Code Online (Sandbox Code Playgroud)

这仍然给我的自定义方法一个未经授权的错误 任何人都知道我哪里出错了?提前致谢.

authorization ruby-on-rails cancan ruby-on-rails-3

0
推荐指数
1
解决办法
331
查看次数

在ASP.NET MVC中构建CustomAuthorization

DB我有RoleUser一对多关系的实体.

我想要做的是建立自定义授权过滤器.我见过的所有教程都使用默认ASP.NET会员资格.我所知道的是,我需要继承,AuthorizationAttribute但不知道我需要覆盖哪些方法以及如何实现它们.

public class UserAuth : AuthorizeAttribute
{

}
Run Code Online (Sandbox Code Playgroud)

DB:

角色

public class Role
{
    [Key]
    public int RoleID { get; set; }

    [Required]
    public int RolenameValue { get; set; }

    [MaxLength(100)]
    public string Description { get; set; }

    // // // // //

    public Rolename Rolename 
    {
        get { return (ProjectName.Domain.Enums.Rolename)RolenameValue; }
        set { RolenameValue = (int)value; }
    }

    public virtual ICollection<User> Users { get; set; } …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc authorization custom-attributes c#-4.0

0
推荐指数
1
解决办法
5742
查看次数