Asp.net JWT认证的工作流程

Asp.net JWT认证的工作流程,asp.net,rest,authentication,soa,jwt,Asp.net,Rest,Authentication,Soa,Jwt,我的任务是为客户创建一个面向服务的生态系统。整个过程都将基于REST并在ASP.NET中构建,但我的问题是技术不可知。我们希望有一个集中的身份验证服务,该服务发布JWT令牌和声明,这些令牌和声明受环境中其他服务的信任 我的问题是——web客户端(浏览器)请求的第一件事是什么?我所看到的所有图表(我将尝试添加几个示例链接)都使客户机似乎需要自我意识,并意识到他们在向功能性REST服务发出第一个请求之前需要一个令牌,这对我来说似乎很简陋 我希望它工作的方式是,他们只是尝试访问受保护的资源,但请求中没

我的任务是为客户创建一个面向服务的生态系统。整个过程都将基于REST并在ASP.NET中构建,但我的问题是技术不可知。我们希望有一个集中的身份验证服务,该服务发布JWT令牌和声明,这些令牌和声明受环境中其他服务的信任

我的问题是——web客户端(浏览器)请求的第一件事是什么?我所看到的所有图表(我将尝试添加几个示例链接)都使客户机似乎需要自我意识,并意识到他们在向功能性REST服务发出第一个请求之前需要一个令牌,这对我来说似乎很简陋

我希望它工作的方式是,他们只是尝试访问受保护的资源,但请求中没有身份验证令牌。我的REST服务向他们询问用户/密码,然后将身份验证委托给我的身份验证服务。因此:

  • 浏览器请求REST服务上的受限资源
  • REST服务返回401
  • 浏览器收集凭据并发送到同一web服务
  • REST服务连接到身份验证服务,并从客户端的请求传递身份验证头
  • Auth服务创建JWT令牌并将其返回给REST服务
  • REST服务验证JWT并用JWT令牌替换Auth头
  • JWT令牌将为后续请求保留,直至expy设置
  • …我对这件事完全不感兴趣了吗?web客户机是否需要知道涉及到一个单独的身份验证服务,并在那里发出一个请求以获取其JWT,然后发出第二个请求以获取通过JWT的REST资源?这对我来说似乎很笨拙,我希望这不是我的想法

    另外,另一个n00b问题-JWT令牌是否由web客户端自动保存,并随每个请求一起重新发送,这样我就不必每次都执行验证服务步骤?这就是过期设置的目的吗

    蒂亚


    关于我的意思,请参见图1:

    从最后一个问题开始,将使其余答案更加清晰:

    • “…是由web客户端自动保存的JWT令牌,并在每次请求时重新发送…”这个想法是发出JWT一次,将其发送给客户端,以便客户端可以保存它并在每次后续请求时发送它。这样,您的前端应用程序将只发送一次用户名和密码,然后使用JWT进行身份验证。您必须使用浏览器存储(本地或会话)或cookie(旧浏览器的常见回退)来存储JWT
    • “…web客户端是否需要知道涉及到一个单独的身份验证服务…”-您需要向服务发送用户名和密码才能发布JWT。您可以只通过一个请求来实现它,但是您需要向服务发送凭据(由用户提供),接收JWT作为响应的一部分并存储它(如上所述)。根据不同的需求和实现,在单独的请求下执行可能更容易