当前位置: 首页 > 知识库问答 >
问题:

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

卫皓
2023-03-14

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

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

所以流程是:WebApp-

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

最初我们在想我们可以将包括标识服务器在内的所有内容隐藏在API管理网关后面,但看起来这没有意义或不可能。我发现这是一个有用的参考:生成访问令牌并通过Azure API管理验证标识服务器4,其中第二个答案非常重要。

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

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

所有这些东西对我来说都是新的,所以可能是我错过了什么或把条款弄乱了。。。

共有2个答案

唐焕
2023-03-14

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

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

更多详细信息可在此处找到:

吕鸿文
2023-03-14

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

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

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

 类似资料:
  • 我已配置Identity Server 4并使用Azure AD身份验证。如果我在身份服务器中使用租户特定的授权URL,一切都可以正常工作。这样,只有该租户的用户才能登录。我希望允许多个域登录,并希望在后端验证发行者。 为了支持这一点,我需要使用Azure AD的通用登录endpoint,在我登录后,当它重定向到Identity Server的登录endpoint时,我收到以下错误。我应该做什么配

  • 我想使用 Firebase 构建一个 Android 应用。Firebase 提供了登录屏幕 https://github.com/firebase/firebase-login-demo-android 的演示代码。 但是,我希望用户能够使用用户已经在Android的集中式帐户管理器中输入的帐户信息,而不是让用户输入他们的帐户信息。 我已经在 https://developer.android.

  • 我运行的是一个分布式Kafka Broker,其中使用SASL/SSL设置了代理间通信。为此,我修改了这里给出的JAAS配置。完成的文件如下所示: 我注意到“KafkaServer”部分有两个管理员用户。我也艰难地了解到我需要两者,但为什么会这样?我有一种感觉,几个月前我已经读过(但忘记了)原因,但我似乎再也找不到了。

  • 这是服务到服务身份验证中概述的规则的一个例外吗?该规则规定需要设置为接收服务的url(例如https://xxxxx.run.app)。和是一回事吗? 最后,除了使用googlecloudsdk(即imaging不存在)之外,是否还有其他方法使用用户帐户而不是服务帐户进行身份验证?

  • 客户已创建密钥存储库并存储凭据。为了验证密钥存储库,我已经在节点中创建了应用程序,并使用客户端id和客户端机密,我能够读取机密。但是现在客户不想使用客户id和客户机密,而是使用AZURE的用户名和密码来访问程序中的keyvault。它是一个没有MFA的keyvault访问的专用用户。 我不确定我们是否可以从节点JS使用用户名和密码访问keyvault。敬请建议。 谢谢

  • 问题内容: 我需要使用PostForm方法将代理与auth一起使用。如果我使用类似(简体)的内容: 我可以轻松做到,并且效果很好。但是现在,我正在编辑第三方程序包,并尝试将代理添加到现有代码中: 在我看来,它是行不通的,而且失败了。在此示例中,没有身份验证的代理可以正常工作。有人知道吗,在这种情况下我可以在auth中使用代理吗? 问题答案: 您正在尝试向响应中添加标头,这不是您发送到服务器的内容,