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

时间:2019-05-09 23:34:16

标签: azure identityserver4 asp.net-core-webapi azure-api-management

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

目前,我们有一个SinglePage应用程序,该应用程序使用Azure上托管的两个后端服务(WebApi .Net Core)。为了对用户进行身份验证和Authrize,我们使用IdentityServer(也作为服务托管在Azure上)+ SubscriptionService。 IdSrv在此对用户进行身份验证,并且还定义了Webapp可以访问哪些API。如果用户有权使用给定的API,那么SubscriptionService会提供信息。差不多那样。

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

现在,我们想将Azure API管理添加到组合中,而我正在努力做到这一点...

最初,我们以为我们可以将包括IdentityServer在内的所有内容隐藏在API Management网关后面,但看起来这没有任何意义或不可能。我发现这是一个有用的参考:Generate Access Token and validate against IdentityServer4 through Azure API Management,其中第二个答案很重要。

基于此,我认为我需要让客户端使用IdentityServer进行身份验证,因为这需要UI交互,然后才以某种方式在API Management中设置了全局策略,以使用提到的Send-Request策略授权用户。然后更改后端以接受此策略中的JWT令牌?我的想法正确吗?如何实施?

还是我应该通过API管理传递来自客户端请求的授权标头?

所有这些对我来说都是新事物,所以可能是我错过了一些东西或弄乱了条款……

2 个答案:

答案 0 :(得分:0)

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

如果您仍然可以让IdSrv面向用户,那么APIM会在每次请求时都收到一个令牌。然后,您可以在APIM中具有全局/ API策略,该策略会将从用户收到的令牌发送到SUbscriptionService,以检查用户进行呼叫的授权)可以使用send-request-request策略来做到这一点,然后让呼叫通过或拒绝。如果要在APIM和后端之间使用不同的身份验证机制,则此方法最有用,因为如果APIM在做授权工作,则后端可以避免检查任何用户访问权限,而只是授权APIM做所有事情。

查看有关如何使用外部服务授权请求的示例:https://docs.microsoft.com/en-us/azure/api-management/policies/authorize-request-using-external-authorizer

答案 1 :(得分:0)

问这个问题还很晚,但是我在这里描述了我们是如何做到的。我们通过APIM上的SSL认证授权涵盖UI客户端和设备客户端。简而言之:

  • UI客户端被重定向到ID服务器日志页面
  • APIM正在使用ID服务器进行令牌验证
  • APIM正在数据库中进行SSL认证验证,并向设备返回诸如令牌之类的数据,以通过一些“设备帐户”信息。

更多详细信息,请参见here