Проверка токена авторизации во входящих запросах с помощью управления API Azure и стороннего сервера авторизации - PullRequest
0 голосов
/ 11 февраля 2019

Мне нужно внедрить OAuth 2.0 в моем проекте с сторонним сервером авторизации.И мой клиент, и сервер уже зарегистрированы в AS.Я создал экземпляр управления API в Azure и импортировал API-интерфейсы Swagger.Я хочу, чтобы каждый входящий запрос проверялся по моей AS, поэтому мне просто нужно перенаправить запрос на https://my -as.com / as / introspect.oauth2 и проверить токен.Если токен действителен, то пусть он продолжается или отправляет 401. Я пытался реализовать это с помощью «входящей обработки» и ссылался на следующий документ: https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-protect-backend-with-aad#configure-a-jwt-validation-policy-to-pre-authorize-requests.

Единственная проблема заключается в том, что вместо Azure ADЯ использую стороннюю AS.Я попытался заменить URL-адрес в примере XML-кода своим URL-адресом, но он не работает.

Как перенаправить запросы на сервер авторизации для проверки токена доступа?

1 Ответ

0 голосов
/ 13 февраля 2019

Добавление следующей входящей политики сработало:

<inbound>
        <!-- Extract Token from Authorization header parameter -->
        <set-variable name="token" value="@(context.Request.Headers.GetValueOrDefault("Authorization","scheme param").Split(' ').Last())" />
        <!-- Send request to Token Server to validate token (see RFC 7662) -->
        <send-request mode="new" response-variable-name="tokenstate" timeout="20" ignore-error="true">
            <set-url>https://my-as.com/as/introspect.oauth2</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>@($"grant_type=urn:pingidentity.com:oauth2:grant_type:validate_bearer&client_id=UoM&client_secret=somesecret&token={(string)context.Variables["token"]}")</set-body>
        </send-request>
        <choose>
            <!-- Check active property in response -->
            <when condition="@((bool)((IResponse)context.Variables["tokenstate"]).Body.As<JObject>()["active"] == false)">
                <!-- Return 401 Unauthorized with http-problem payload -->
                <return-response response-variable-name="existing response variable">
                    <set-status code="401" reason="Unauthorized" />
                    <set-header name="WWW-Authenticate" exists-action="override">
                        <value>Bearer error="invalid_token"</value>
                    </set-header>
                </return-response>
            </when>
        </choose>
        <base />
    </inbound>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...