Asp.Net Core - 来自其他服务器的自定义授权和身份?

时间:2017-04-08 06:54:49

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

我正在尝试弄清楚如何使用另一台服务器中的凭据和用户数据配置/使用Asp.Net核心授权,通过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. 如果持票人令牌有效,资源服务器会询问 auth 服务器
  4. 如果是,则资源服务器需要再次向 auth 服务器询问具有该承载令牌的用户,以及该用户是否具有访问该承载令牌所必需的漏洞/声明请求的资源。
  5. 这一步是我的疑问。我想这应该发生在资源服务器控制器上:

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

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

    我尽可能地简化了这种架构,以使我的问题更加清晰。请忘记“Auth”服务器的安全性。

1 个答案:

答案 0 :(得分:0)

如果你正在使用jwts这个流可以简化角色可以存储在声明中,这意味着在authorize属性中不需要api调用。

资源服务器也不需要验证令牌是否有效可以使用秘密来完成。

考虑一下thinktecture,以下是好资源https://leastprivilege.com/https://brockallen.com/