【问题标题】:Asp.Net Core - Custom Authorization and Identity from another server?Asp.Net Core - 来自另一台服务器的自定义授权和身份?
【发布时间】:2017-04-08 06:54:49
【问题描述】:

我试图弄清楚如何配置/使用 Asp.Net Core Authorization 以及通过 API 访问的另一台服务器中的凭据和用户数据。

例如,在“Auth”服务器中,我们有 Auth 数据库,用于存储用户、角色和声明。一些例子:

获取https://auth.myserver.com/v1/users/4/IsInRole/Admin

响应是一个简单的布尔值。

或者:

获取https://auth.myserver.com/v1/users/4/GetRolesForUser/

响应是一个角色列表。

另一台服务器是资源服务器(也完全基于 API,没有前端)。它存储了大量需要角色和声明授权的数据。

此外,我们还有第三个参与者:客户。

客户将:

  1. 使用用户名和密码请求 auth 服务器获取承载和刷新令牌
  2. 客户端存储这些令牌并将承载发送到资源服务器以获取一些数据
  3. resource 服务器将询问 auth 服务器是否承载令牌有效
  4. 如果是,则资源服务器需要再次向 auth 服务器询问拥有该不记名令牌的用户,以及该用户是否具有访问请求的资源。

第 4 步是我的疑问。我想这应该发生在资源服务器控制器上:

[HttpGet]
[Authorize(Roles = "Admin")]   //API CALL HERE TO THE AUTH SERVER (?)
public async Task<IActionResult> GetData()
{
    ...

基本上,我不知道如何在上下文中验证用户(直到返回请求),使用我自己的自定义验证过程将其放入 HttpContext.User

我已尝试尽可能简化此架构,以使我的问题更清楚。请忘记“Auth”服务器上的安全性。

【问题讨论】:

    标签: c# asp.net authentication asp.net-core authorization


    【解决方案1】:

    如果您使用的是 jwts,则此流程可以简化,角色可以存储在声明中,这意味着授权属性中不需要 api 调用。

    此外,资源服务器不需要验证令牌是否有效,这可以使用密钥来完成。

    看看thinktecture下面是很好的资源https://leastprivilege.com/https://brockallen.com/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 2016-07-14
      • 2019-03-10
      相关资源
      最近更新 更多