0

我们有一个现有的 API,它通过对 xxxx.com/api/vi/auth/token 的初始用户名和密码调用来保护,该 API 返回一个不记名令牌,以包含在对 API 的所有未来调用中。此 API 与一些受信任的应用程序一起使用。

我们现在需要将此 API 置于 Azure API 管理 (APIM) 之后,以供新合作伙伴使用,并已将其设置为将 OAuth2 与 AD 结合使用。

理想情况下,当 APIM 调用我们的后端 API 时,我们需要它通过现有的 API 身份验证流程来获取现有的 API 令牌并将其包含在任何调用中。

似乎可以在 Azure 中设置一些有限的“授权凭据”,但我找不到有关如何设置/使用它们的任何帮助。

4

1 回答 1

0

它可以通过多种方式完成,但其中大多数都涉及编写自定义策略。最简单的如下所示:

<send-request mode="new" response-variable-name="token" timeout="3">
    <set-url>xxxx.com/api/vi/auth/token</set-url>
    <set-method>POST</set-method>
    <set-header name="Authorization" exists-action="override">
        <value>Basic dXNlcm5hbWU6cGFzc3dvcmQ=</value>
    </set-header>
</send-request>
<set-header name="Authorization" exists-action="override">
    <value>@("Bearer " + ((IResponse)context.Variables["token"]).Body.As<string>())</value>
</set-header>

send-request发送带有基本身份验证标头的请求(替换您的值),并将响应存储在token变量中。

set-header从响应中获取正文token,将其解析为字符串并将其放入Authorization请求到后端的标头中。

可以在此处进行的一些改进:

  1. 为安全起见,将您的基本凭据存储在命名值中。
  2. 缓存令牌,这样您就不需要为每个请求获取它,可能基于令牌过期进行缓存
于 2021-09-28T16:16:27.443 回答