Как получить токен доступа для RAML API с помощью OAuth 2.0

Я работал с проектом Mule, используя RAML и API Manager. следуя приведенной здесь процедуре

AM использует API Manager для управления сервисом, связанным с такими характеристиками, как

  • Простой менеджер безопасности,
  • Поставщик OAuth2.0 и
  • Использование токенов доступа OAuth2.0.

У меня есть отдельный поток для перенаправления, который делает следующее

  1. установите "статус" на 302
  2. установите "Расположение" на URL ниже

    http://localhost:8081/org/oauth/token?grant_type=authorization_code&&client_id=53a406c3e4b0624da8246eed&client_secret=myclientsecret&code=#[message.inboundProperties.code]&redirect_uri=http://localhost:8081/raml-api-with-oauth/redirect

Все идет хорошо до здесь.

Но когда я пытаюсь нажать на URL для токена доступа, я вижу сообщение

{ "Ошибка":"unauthorized_client", "error_description":""}

Подводя итог моего вопроса:

  1. Пожалуйста, помогите мне с процедурой "OAuth Dance"
  2. Как установить действующий контракт с API для облегчения связи clientId и clientSecret, необходимых для танца OAuth.

Пожалуйста, помогите мне, где я иду не так.

RAML код:

#%RAML 0.8
title: raml-api-with-oauth
version: v1
baseUri: http://localhost:8081/raml-api-with-oauth
securedBy: [oauth_2_0]
securitySchemes:
    - oauth_2_0:
        description: |
            This supports OAuth 2.0 for authenticating all API requests.
        type: OAuth 2.0
        describedBy:
            headers:
                Authorization:
                    description: |
                       Used to send a valid OAuth 2 access token. Do not use
                       with the "access_token" query string parameter.
                    type: string
            queryParameters:
                access_token:
                    description: |
                       Used to send a valid OAuth 2 access token. Do not use together with
                       the "Authorization" header
                    type: string
            responses:
                401:
                    description: |
                        Bad or expired token. This can happen if the user or Dropbox
                        revoked or expired an access token. To fix, you should re-
                        authenticate the user.
                403:
                    description: |
                        Bad OAuth request (wrong consumer key, bad nonce, expired
                        timestamp...). Unfortunately, re-authenticating the user won't help here.
                404:
                  description: Unauthorized
        settings:
          authorizationUri: org/oauth/authorize
          accessTokenUri: org/oauth/token
          authorizationGrants: [code,token]
          scopes:
            - "READ_RESOURCE"
            - "POST_RESOURCE"
            - basic
            - comments
            - relationships
            - likes
mediaType: application/json
/employee:
  get:
    description:
      This is a Get Call which throws some response in json.
    responses:
      200:
        body:
          application/json:
            example: |
              {
                "empcode" : 1,
                "ename": "Rafiq", 
                "company" : "org"
              }

2 ответа

Приведенный ниже код представляет собой oauth 2.0 (raml 1.0)securitySchemes: oauth_2_0: description: | This API supports OAuth 2.0 for authenticating all API requests. type: OAuth 2.0 describedBy: headers: Authorization: description: | Used to send a valid OAuth 2 access token. Do not use with the "access_token" query string parameter. type: string queryParameters: access_token: description: | Used to send a valid OAuth 2 access token. Do not use together with the "Authorization" header type: string responses: 401: description: | Bad or expired token. This can happen if the user or the API revoked or expired an access token. To fix, you should re-authenticate the user. 403: description: | Bad OAuth request (wrong consumer key, bad nonce, expired timestamp...). Unfortunately, re-authenticating the user won't help here. settings: authorizationUri: INSERT_OAUTH2_AUTHORIZATION_URI accessTokenUri: INSERT_OAUTH2_ACCESS_TOKEN_URI authorizationGrants: INSERT_OAUTH2_AUTHORIZATION_GRANTS scope: [READ,WRITE]

  • как только вы включите этот код в свой raml, мы должны предоставить валидный URL в политике oauth. https: // имя-приложения / validate (внешний поставщик oauth)

    или поставщик oauth должен указать URL-адрес, который требуется в raml (авторизация, access_token и URL-адрес валидации)

    Ресурсы могут быть принудительно установлены с помощью oauth, чтобы было более безопасно делиться ресурсами.

    после генерации потока из raml нам нужно развернуть приложение на cloudhub.

    нам нужно предоставить организацию client_id и client_secret, чтобы она предоставляла access_token, в противном случае выдает неправильный клиент.

Политика Oauth основана на безопасности Mule Enterprise, чтобы понять танцы для различных типов грантов, пожалуйста, смотрите эту страницу документации:

http://www.mulesoft.org/documentation/display/current/Creating+an+OAuth+2.0a+Web+Service+Provider

Другие вопросы по тегам