我目前正在创建一个基于微服务架构的新应用程序,并由Identity Server 4提供身份验证。
经过大量研究并设置概念证明,我设置了Identity Server以保护API,并使用令牌成功访问这些服务的本机应用程序。
最初,客户端获得了一个用于访问API的访问令牌,但我现在已经将其切换为使用引用令牌。现在,关于这个问题!
我想采取的方法是采用微服务网关,它接收一个参考令牌,然后将其转换为JWT,以包含在对下游微服务的任何请求中。在网关内,我怎样才能交换" JWT的入站参考令牌? Identity Server中是否有可以提供帮助的内容?或者我是否需要使用内省端点,发送引用令牌并检索声明以在网关服务中构建JWT以将Authorization标头传递给所有下游服务?
如果我可以提供任何进一步的信息来帮助理解架构的目标,请告诉我。
答案 0 :(得分:4)
这是扩展授权的一个很好的用例。请参阅文档:
https://identityserver4.readthedocs.io/en/release/topics/extension_grants.html
答案 1 :(得分:4)
我想我会在这里跟进一些关于我的实现的细节,以防其他人想要使用参考令牌保护API网关,以及需要JWT的下游服务。
我已经实现了一个在API网关中运行的ASP.Net Core中间件。中间件在Identity Server Authentication中间件之后和MVC中间件之前在管道中运行。中间件的目的是获取入站引用令牌并与Identity Server(使用Extension Grants)交换此JWT,以便在调用下游微服务时可以在Authorization标头中使用。
中间件可在GitHub上使用,也可以NuGet package使用。有关中间件用例的更多详细信息,请参阅GitHub自述文件,还有关于GitHub Wiki中可用的中间件的安装和配置的详细信息。
除了为访问令牌执行参考令牌交换之外,中间件还内置了对缓存的支持,减少了到Identity Server的往返次数以执行令牌交换。
如果有人想使用中间件并且对文档未涵盖的安装和配置有疑问,请在标记为问题的GitHub存储库中添加一个问题。