Azure API管理:带有后端API的Oauth2

时间:2017-05-22 09:43:00

标签: api azure oauth azure-api-management

我有一个后端API,我希望使用Azure API管理进行代理。 这个后端API要求我提供Bearer Oauth2令牌。 我想使用Azure APIM为我处理Oauth2流,我想公开一个非常简单的API,将由客户端应用程序使用。我想避免我的客户端应用程序使用Oauth2。 我如何使用API​​M处理它?我发现很多样本演示了如何使用Oauth2保护后端API,但这不是我试图实现的用例。 感谢。

2 个答案:

答案 0 :(得分:1)

以下是一项政策摘要:

    <send-request ignore-error="true" timeout="20" response-variable-name="bearerToken" mode="new">
        <set-url>{{authorizationServer}}</set-url>
        <set-method>POST</set-method>
        <set-header name="Content-Type" exists-action="override">
            <value>application/x-www-form-urlencoded</value>
        </set-header>
        <set-body>   
            @{
                return "client_id={{clientId}}&resource={{scope}}&client_secret={{clientSecret}}&grant_type=client_credentials";
            }
        </set-body>
    </send-request>

    <set-header name="Authorization" exists-action="override">
        <value>
            @("Bearer " + (String)((IResponse)context.Variables["bearerToken"]).Body.As<JObject>()["access_token"])
        </value>
    </set-header>

    <!--  We do not want to expose our APIM subscription key to the backend API  -->
        <set-header exists-action="delete" name="Ocp-Apim-Subscription-Key"/>

来自:https://github.com/orangetoken/api-management-policy-snippets/blob/master/Snippets/Add%20Azure%20AD%20OAuth2%20bearer%20token%20to%20request%20to%20AD%20protected%20API.xml

来自APIM团队的APIM政策摘要分支 https://github.com/Azure/api-management-policy-snippets/blob/master/examples/Get%20OAuth2%20access%20token%20from%20AAD%20and%20forward%20it%20to%20the%20backend.policy.xml

答案 1 :(得分:0)

您需要做的是添加标头以请求 - 使用set-header策略将Authorization标头设置为所需的值。如果你可以在政策中硬编码令牌,这将很有效。

如果你不能 - 你必须使用send-request在策略中组织OAuth流。简而言之,您要做的就是向OAuth端点发送app id和secret,并解析其响应以获取令牌并将其附加到请求中。