使用IdentityServer和Azure API管理进行用户身份验证

使用IdentityServer和Azure API管理进行用户身份验证,azure,identityserver4,asp.net-core-webapi,azure-api-management,Azure,Identityserver4,Asp.net Core Webapi,Azure Api Management,我需要有关Azure API管理服务的帮助 目前,我们有一个单页应用程序,它使用托管在Azure上的两个后端服务(WebApi.NETCore)。为了验证和授权用户,我们使用IdentityServer(也作为服务托管在Azure上)+SubscriptionService。在这里,IdSrv对用户进行身份验证,并定义webapp可以访问哪些api。如果用户拥有给定API的权限,SubscriptionService将提供相关信息。差不多是这样 因此,流程是: WebApp->重定向到IdSrv

我需要有关Azure API管理服务的帮助

目前,我们有一个单页应用程序,它使用托管在Azure上的两个后端服务(WebApi.NETCore)。为了验证和授权用户,我们使用IdentityServer(也作为服务托管在Azure上)+SubscriptionService。在这里,IdSrv对用户进行身份验证,并定义webapp可以访问哪些api。如果用户拥有给定API的权限,SubscriptionService将提供相关信息。差不多是这样

因此,流程是: WebApp->重定向到IdSrv端点->登录->返回UI->使用用户凭据询问后端(令牌)

现在,我们想将Azure API管理添加到组合中,而我正在为如何做到这一点而苦苦挣扎

起初,我们认为可以将所有内容(包括IdentityServer)隐藏在API管理网关后面,但这似乎没有意义或不可能。我发现这是一个有用的参考:其中第二个答案是非常重要的评论

基于此,我认为我需要让客户端使用IdentityServer进行身份验证,因为这需要UI交互,但随后在API管理中设置了一个全局策略,以授权用户使用上述发送请求策略。然后更改后端以接受此策略中的JWT令牌?我的想法正确吗?如何实现这一点

或者我应该通过API管理从客户端请求传递授权头


所有这些对我来说都是新事物,所以可能是我遗漏了什么或把术语弄乱了…

您将APIM集成到图片中的方式可能取决于您希望通过APIM实现的目标。您可以将IdSrv隐藏在APIM后面,因为存在允许APIM对API进行身份验证/授权的客户端凭据流,或者您可以让用户通过授权代码授权APIM一次,然后存储刷新令牌并使用它们与API对话。但我不确定这是否是最好的,因为它会大大改变您的系统,迫使您解决其他问题,比如如何向APIM验证用户。在某些情况下,这可能是一个很好的方法,由您决定

如果您不介意让IdSrv面向用户,那么我们会让APIM在每个请求中接收令牌。然后,您可以在APIM中拥有一个全局/API策略,该策略将从用户接收到的令牌发送到SUbscriptionService以检查用户是否有权进行调用(可以使用发送请求策略),并允许调用通过或拒绝。如果您想在APIM和后端之间使用不同的身份验证机制,这种方法非常有用,因为如果APIM正在执行授权工作,那么后端可以避免检查任何用户访问,而只授权APIM执行所有操作


查看这个关于如何使用外部服务授权请求的示例:

问这个问题已经很晚了,但这里我描述了我们是如何做到这一点的。我们介绍在APIM上使用SSL认证身份验证的UI客户端和设备客户端。简言之:

  • 正在将UI客户端重定向到ID服务器登录页
  • APIM正在使用ID服务器进行令牌验证
  • APIM正在数据库中进行SSL认证验证,并返回类似令牌的数据,以便设备传递一些“设备帐户”信息
详情请参阅: