Проверка подлинности Skype для бизнеса в Azure UCWA - выданный токен не принят

Я интегрирую приложение Java с Skype для бизнеса в Azure, используя UCWA, и вот список действий, которые я выполнил. Когда казалось, что все работает и накрывается, я застреваю в неожиданном месте. Возможно, решение является чем-то тривиальным, например, добавление разрешения на добавление, но я не могу его найти. Также я уверен, что этот пост поможет тому, кто застрял на ранней стадии.

  1. Регистрация приложения на портале Azure: регистрация в качестве собственного приложения. Добавление необходимых разрешений для всех разрешений Skype для бизнеса Online. Предоставление разрешений всем пользователям. Получение идентификатора приложения (будет использоваться позже в качестве идентификатора клиента).

  2. HTTP Get, кстати: (арендатор) должен быть заменен фактическим именем арендатора. Запрос:

    curl -X GET \ http://lyncdiscover.(tenant).onmicrosoft.com/ \ -H 'cache-control: no-cache' \ -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \ -H 'postman-token: b45b8fee-852f-4678-3631-3a06727d99fc' \ -F Capture=undefined

Отклик:

`{
    "_links": {
        "self": {
            "href": "https://webdir0a.online.lync.com/Autodiscover/AutodiscoverService.svc/root?originalDomain=(tenant).onmicrosoft.com"
        },
        "xframe": {
            "href": "https://webdir3a.online.lync.com/Autodiscover/AutodiscoverService.svc/root/xframe"
        },
        "redirect": {
            "href": "https://webdir3a.online.lync.com/Autodiscover/AutodiscoverService.svc/root?originalDomain=(tenant).onmicrosoft.com"
        }
    }
}`
  1. HTTP Получить URL перенаправления

    curl -X GET \ 'https://webdir3a.online.lync.com/Autodiscover/AutodiscoverService.svc/root?originalDomain=(tenant).onmicrosoft.com' \ -H 'cache-control: no-cache' \ -H 'postman-token: 273cad2b-a9a9-9882-8634-b52f9a9976b5'

    { "_links": { "self": { "href": "https://webdir3a.online.lync.com/Autodiscover/AutodiscoverService.svc/root?originalDomain=(tenant).onmicrosoft.com" }, "user": { "href": "https://webdir3a.online.lync.com/Autodiscover/AutodiscoverService.svc/root/oauth/user?originalDomain=(tenant).onmicrosoft.com" }, "xframe": { "href": "https://webdir3a.online.lync.com/Autodiscover/XFrame/XFrame.html" } } }

  2. Получить URL пользователя

    curl -X GET \ 'https://webdir3a.online.lync.com/Autodiscover/AutodiscoverService.svc/root/oauth/user?originalDomain=(tenant).onmicrosoft.com' \ -H 'cache-control: no-cache' \ -H 'postman-token: af9ab0bd-dc6f-b2f3-e7d9-23941aac5537'

Ответ: 401 Несанкционированный Прочитать HTTP-заголовок ответа и извлечь

`authorization_uri="https://login.windows.net/common/oauth2/authorize"`
  1. Опубликовать для URL авторизации: client+id = идентификатор приложения из ресурса регистрации приложения портала Azure=00000004-0000-0ff1-ce00-000000000000 (идентификатор ресурса SfB)

    curl -X POST \ https://login.windows.net/common/oauth2/token \ -H 'cache-control: no-cache' \ -H 'content-type: application/x-www-form-urlencoded;charset=UTF-8' \ -H 'postman-token: 39902b3f-00c3-e7a8-75d0-6b94f10e07ed' \ -d 'resource=00000004-0000-0ff1-ce00-000000000000&client_id=XXXX-XXXX-XXXX&grant_type=password&username=actualUserName@tenant.com&password=actual_password&scope=openid'

ответ:

`{
    "token_type": "Bearer",
    "scope": "Contacts.ReadWrite Conversations.Initiate Conversations.Receive Meetings.ReadWrite User.ReadWrite",
    "expires_in": "3599",
    "ext_expires_in": "0",
    "expires_on": "1518196708",
    "not_before": "1518192808",
    "resource": "00000004-0000-0ff1-ce00-000000000000",
    "access_token": "eyJ0...",
    "refresh_token": "AQABA...",
    "id_token": "eyJ0e..."
}`

Да, я получаю настоящий токен и все вроде бы нормально, но это не так. Когда я снова использую этот токен, чтобы получить URL-адрес пользователя, ответ 403 Запрещен, и я застрял.

`curl -X GET \
  'https://webdir3a.online.lync.com/Autodiscover/AutodiscoverService.svc/root/oauth/user?originalDomain=(tenant).onmicrosoft.com' \
  -H 'authorization: Bearer eyJ0eXA...' \
  -H 'cache-control: no-cache' \
  -H 'postman-token: ff0a80bd-5025-5b28-3f1c-cf9205890812'`

ответ: 403 Запрещено

`    <body>
        <div id="header">
            <h1>Server Error</h1>
        </div>
        <div id="content">
            <div class="content-container">
                <fieldset>
                    <h2>403 - Forbidden: Access is denied.</h2>
                    <h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>
                </fieldset>
            </div>
        </div>
    </body>`

1 ответ

Решение

Ошибка в шаге 4, параметр resource. Правильный запрос использует URL-адрес сервера пользователя в качестве параметра ресурса:

curl -X POST \
  https://login.windows.net/common/oauth2/token \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/x-www-form-urlencoded;charset=UTF-8' \
  -H 'postman-token: 39902b3f-00c3-e7a8-75d0-6b94f10e07ed' \
  -d 'resource=https://webdir3a.online.lync.com&client_id=XXXX-XXXX-XXXX&grant_type=password&username=actualUserName@tenant.com&password=actual_password&scope=openid

а затем используйте полученный токен, чтобы получить URL-адрес приложения из URL-адреса пользователя. После получения URL-адреса приложения необходимо опубликовать новый запрос токена, чтобы получить токен для сервера приложений, в моем случае это было:

curl -X POST \
  https://login.windows.net/common/oauth2/token \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/x-www-form-urlencoded;charset=UTF-8' \
  -H 'postman-token: 39902b3f-00c3-e7a8-75d0-6b94f10e07ed' \
  -d 'resource=https://webpoolsn23a14.infra.lync.com&client_id=XXXX-XXXX-XXXX&grant_type=password&username=actualUserName@tenant.com&password=actual_password&scope=openid

Этот токен наконец может быть использован для создания приложения и других служб обмена сообщениями.

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