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

通过Azure API管理生成访问令牌并根据IdentityServer4进行验证

缑泓
2023-03-14

我有一个外部endpoint,它将访问Azure API网关,并将其路由到受IdentityServer4授权保护的后端API。

如果我使用IdentityServer的交互式UI通过Postman客户endpoint击访问令牌,我将获得该令牌。

是否有办法从Azure API管理中获取所需的访问令牌,以根据IdentityServer4进行验证,并将其附加到后端API请求中的标头?

共有2个答案

燕航
2023-03-14

Postman有一种特权,即人类用户可以看到UI并授权API访问和IdentityServer4为Postman颁发令牌。当APIM服务器处理调用时,并没有这种奢侈,因为您可以向IdentityServer4发送令牌请求,但会向谁显示UI来授权该操作?

唯一的方法是向APIM提供某种秘密(标头、查询、证书),这些秘密将被IdtyServer4识别,以允许它为APIM发布令牌。如果此类secred可用,您可以使用发送请求策略调用IdtyServer4并获取所需的令牌。

或者确保每个对APIM的请求都已经有一个令牌。

龙佐
2023-03-14

是的,可以通过自定义策略来实现它。您可以要求外部API客户端/消费者在heaser中添加凭据,然后在入站内编写策略以读取这些用户凭据并执行API请求(类似于您的邮递员)并获取访问令牌。然后您可以附加相同的令牌并让您的请求转发到后端API。

根据你的问题陈述,这应该是可行的。如果不是,您可能需要用更多的描述/步骤来解释您的场景。

这里有一些参考资料给你,希望对你有所帮助。

https://docs.microsoft.com/en-us/azure/api-management/api-management-advanced-policies#SendRequest

https://docs.microsoft.com/en-us/azure/api-management/api-management-sample-send-request

 类似资料:
  • 我使用IdentityServer4验证angular 4客户端以保护WebApi。但我在授权的情况下进入了401。我需要一种调试访问令牌验证过程的方法来帮助我解决问题。

  • 我一直在尝试使用简单的REST客户端以及Mozilla的REST插件。我收到“HTTP/1.1 401未授权”响应,正文中带有“{”error:“unauthorized_client”、“error_description”:“客户端未授权”}。 我已经成功获取了auth码,下面是访问令牌的POST请求,(范围r_fullprofile) https://www.linkedin.com/uas

  • 我使用Azure AD作为具有IdentityServer4的外部IdP。要调用受AzureAd保护的API,我需要从Azure Ad获取访问令牌。是否可以在登录过程中获取访问令牌并将其保存到声明中? 我正在使用IdentityServer4快速启动UI。我试图在外部令牌的回调方法中捕获访问令牌,但在HttpContext或声明或ProcessLoginCallbackForOidc方法中没有找到

  • 当我试图在访问令牌过期之前使用刷新令牌生成访问令牌时,系统会生成一个新令牌,并且一切正常。但是如果访问令牌过期,则请求返回。 中的方法不是使用我从以前的访问令牌中存储在字典中的标识生成访问令牌吗? 如果上一个更新令牌尚未过期,如何阻止客户端使用相同的刷新令牌请求新的访问令牌? oauthProvider.cs: RefreshTokenProvider.cs: 对不起,英语不好,希望你能理解!

  • 当我尝试使用以下命令生成访问令牌时: 它抛出的错误为: {“error_description”:“缺少必需的参数,包括无效的参数值,参数多次。:无法检索访问令牌:appId或重定向uri与授权码不匹配或授权码过期”,“error”:“invalid_request”}。 你能在这个问题上指导我吗?

  • https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=your_app_client_id&response_type=code&redirect_uri=https%3a%2f%2flogin.microsoftonline.com%2fcommon%2foauth2%2fnativeclient&res