使用 IdentityServer 和 Azure API 管理的用户身份验证
User Authentication with IdentityServer and Azure API Management
我需要一些有关 Azure API 管理服务的帮助。
目前我们有一个单页应用程序,它使用托管在 Azure 上的两个后端服务 (WebApi .Net Core)。我们使用 IdentityServer(也作为服务托管在 Azure 上)+ SubscriptionService 来验证和授权用户。这里 IdSrv 对用户进行身份验证,它还定义了 webapp 可以访问的 APIs。如果用户有权给定 APIs,则 SubscriptionService 会提供信息。差不多就是这样。
所以流程是:
WebApp -> 重定向到 IdSrv 端点 -> 登录 -> 返回 UI -> 使用用户凭据(令牌)询问后端
现在,我们想将 Azure API 管理添加到混合中,我正在努力如何做到这一点...
最初我们认为我们可以将包括 IdentityServer 在内的所有内容隐藏在 API 管理网关后面,但看起来这没有意义或不可能。我发现这是一个有用的参考: 其中第二个答案非常重要。
基于此,我认为我需要让客户端使用 IdentityServer 进行身份验证,因为这需要 UI 交互,然后以某种方式在 API 管理中设置全局策略以授权用户使用提到 Send-Request 政策。然后更改后端以接受来自此策略的 JWT 令牌?我的想法正确吗?如何实施?
或者我应该通过 API 管理传递来自客户端请求的 authorization-header?
所有这些对我来说都是新的,所以可能是我漏掉了一些东西或者弄乱了条款...
将 APIM 整合到图片中的方式可能取决于您希望使用 APIM 实现的目标。您可以将 IdSrv 隐藏在 APIM 后面,因为存在允许 APIM 到 authenticate/authorize 本身到 API 的客户端凭据流,或者您可以让用户授权 APIM 一次通过授权代码授予,然后存储刷新令牌并使用它们与 API 交谈。但我不确定那会是最好的,因为它会相当大地改变你的系统并迫使你解决其他问题,比如如何对 APIM 的用户进行身份验证。在某些情况下,这可能是一个很好的方法,由您决定。
如果您同意让 IdSrv 面向用户,那么我们 APIM 会在每个请求中接收一个令牌。然后,您可以在 APIM 中有一个 global/API 策略,将从用户收到的令牌发送到 SUbscriptionService 以检查用户授权以进行调用)可以使用 send-request 策略),或者让电话通过或拒绝。如果您想在 APIM 和后端之间使用不同的身份验证机制,这种方法最有用,因为如果 APIM 正在进行授权工作,您的后端可以避免检查任何用户访问,而只是授权 APIM做一切。
查看此示例,了解如何使用外部服务授权请求:https://docs.microsoft.com/en-us/azure/api-management/policies/authorize-request-using-external-authorizer
问这个问题已经很晚了,但在这里我描述了我们是如何做到的。我们涵盖 UI 客户端和设备客户端,在 APIM 上使用 SSL 认证授权。简而言之:
- UI 客户端被重定向到 ID 服务器登录页面
- APIM 正在使用 ID Server 进行令牌验证
- APIM 正在数据库中进行 SSL 认证验证,并返回令牌之类的数据,供设备传递一些“设备帐户”信息。
可以找到更多详细信息here:
我需要一些有关 Azure API 管理服务的帮助。
目前我们有一个单页应用程序,它使用托管在 Azure 上的两个后端服务 (WebApi .Net Core)。我们使用 IdentityServer(也作为服务托管在 Azure 上)+ SubscriptionService 来验证和授权用户。这里 IdSrv 对用户进行身份验证,它还定义了 webapp 可以访问的 APIs。如果用户有权给定 APIs,则 SubscriptionService 会提供信息。差不多就是这样。
所以流程是: WebApp -> 重定向到 IdSrv 端点 -> 登录 -> 返回 UI -> 使用用户凭据(令牌)询问后端
现在,我们想将 Azure API 管理添加到混合中,我正在努力如何做到这一点...
最初我们认为我们可以将包括 IdentityServer 在内的所有内容隐藏在 API 管理网关后面,但看起来这没有意义或不可能。我发现这是一个有用的参考:
基于此,我认为我需要让客户端使用 IdentityServer 进行身份验证,因为这需要 UI 交互,然后以某种方式在 API 管理中设置全局策略以授权用户使用提到 Send-Request 政策。然后更改后端以接受来自此策略的 JWT 令牌?我的想法正确吗?如何实施?
或者我应该通过 API 管理传递来自客户端请求的 authorization-header?
所有这些对我来说都是新的,所以可能是我漏掉了一些东西或者弄乱了条款...
将 APIM 整合到图片中的方式可能取决于您希望使用 APIM 实现的目标。您可以将 IdSrv 隐藏在 APIM 后面,因为存在允许 APIM 到 authenticate/authorize 本身到 API 的客户端凭据流,或者您可以让用户授权 APIM 一次通过授权代码授予,然后存储刷新令牌并使用它们与 API 交谈。但我不确定那会是最好的,因为它会相当大地改变你的系统并迫使你解决其他问题,比如如何对 APIM 的用户进行身份验证。在某些情况下,这可能是一个很好的方法,由您决定。
如果您同意让 IdSrv 面向用户,那么我们 APIM 会在每个请求中接收一个令牌。然后,您可以在 APIM 中有一个 global/API 策略,将从用户收到的令牌发送到 SUbscriptionService 以检查用户授权以进行调用)可以使用 send-request 策略),或者让电话通过或拒绝。如果您想在 APIM 和后端之间使用不同的身份验证机制,这种方法最有用,因为如果 APIM 正在进行授权工作,您的后端可以避免检查任何用户访问,而只是授权 APIM做一切。
查看此示例,了解如何使用外部服务授权请求:https://docs.microsoft.com/en-us/azure/api-management/policies/authorize-request-using-external-authorizer
问这个问题已经很晚了,但在这里我描述了我们是如何做到的。我们涵盖 UI 客户端和设备客户端,在 APIM 上使用 SSL 认证授权。简而言之:
- UI 客户端被重定向到 ID 服务器登录页面
- APIM 正在使用 ID Server 进行令牌验证
- APIM 正在数据库中进行 SSL 认证验证,并返回令牌之类的数据,供设备传递一些“设备帐户”信息。
可以找到更多详细信息here: