【问题标题】:Multiple Authentication / Authorization support for Web API via OWIN通过 OWIN 对 Web API 的多重身份验证/授权支持
【发布时间】:2014-05-02 23:06:51
【问题描述】:

我有一个需要保护的 Web API 项目。我计划允许在我的应用中注册的用户使用 API [表单身份验证]、拥有自己的组织帐户 [ADFS] 和社交登录的用户。

我拥有所有可用于插件的中间件,并可供用户使用。但是,在我的应用程序中,我确实具有要提供的自定义角色和权限,以便我的应用程序根据现有权限授权服务调用。实现这一目标的最佳方法是什么。

我认为我需要使用自己的 IUser 实现来提供我自己的 UserStore 和 UserManager 自定义实现。

请针对这种情况提出最佳做法。

【问题讨论】:

    标签: authentication authorization owin


    【解决方案1】:

    注册多个认证中间件,可以获得多个claimidentity。

    注册您想要支持的每种身份验证类型。

    我一定会在管道末尾添加一个声明转换模块。 Thinktecture 有一个例子。 ThinkTecture Owin Claims Transformer

    这将使您在一个地方查找并在一个地方为经过身份验证的用户添加所有应用程序类型声明。

    简单的伪示例(面向 webapi,但概念相同)。使用承载或基本或两者进行身份验证,然后进行转换。

    //identity 2.0 user manager stuff used in your modules
    app.CreatePerOwinContext(ApplicationSession.Create);
    app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
    
    // Token Authentication -> get a principle
    app.UseOAuthBearerAuthentication(OAuthBearerOptions);
    
    // Basic Authentication. -> get a principle
    app.UseBasicAuthentication(app.CreateLogger<BasicAuthenticationMiddleware>(), 
                    "Realm", ValidateUser);
    
    // transform claims to application identity.  Add additional claims if needed
    app.UseClaimsTransformation(TransformClaims);
    

    【讨论】:

      【解决方案2】:

      听起来您正在寻找外部授权。外部授权是以下行为:

      • 将业务逻辑与授权逻辑解耦
      • 将授权逻辑表示为集中管理的集中授权策略
      • 通过公共层保护您的 API
      • 通过使用基于属性的访问控制 (ABAC) 来实现细粒度的动态访问控制,这扩展了 RBAC(基于角色的访问控制)的可能性。

      看看 XACML,可扩展访问控制标记语言。您可以在 OASIS 的website 上找到更多信息。

      还可以查看 NIST 在 ABAC 上的 project

      一旦您定义了授权逻辑,您就可以决定如何执行它。这可以通过在您的应用程序入口处直接执行来完成,也可以通过配置方式完成,即从授权策略派生的权限被输入到身份验证令牌中,例如SAML 作为属性分配。

      HTH

      【讨论】:

      • 请注意,我的帖子与使用 OWIN 处理外部登录有关
      • 然后考虑改写你的问题。您在谈论授权和用户权限。
      【解决方案3】:

      这就是我最终为具有类似要求的系统设计的。关键是要分离认证和授权逻辑。

      • 构建 Owin 身份验证中间件组件,负责根据您提到的各种登录方法建立用户身份。看起来你已经完成了。根据用户设置 ASP.NET 标识。

      • 从您的商店中检索登录用户的角色/权限。这可以作为单独的 Owin 中间件或身份验证的一部分来完成。将权限作为声明添加到您的委托人。

      • 扩展您的角色/权限存储以将 API 服务操作映射到应用程序权限。

      • 实现自定义 API 授权属性并将其应用于每个 API 操作。在此属性中,您将有权访问操作名称和用户声明(权限)。将声明与您在上述步骤中映射的权限相匹配。如果匹配,则返回 IsAuthorized=true,否则,返回 false。

      这里有一个更简单的类似问题。

      How do you setup mixed authorizations for different authentications in .net (web api 2 + owin)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-25
        • 1970-01-01
        • 2019-10-14
        • 2016-01-12
        • 2012-09-10
        • 1970-01-01
        • 1970-01-01
        • 2012-05-27
        相关资源
        最近更新 更多