Как получить токен обновления с помощью oauth в Microsoft365?

Я пытаюсь использовать microsoft365 и oauth, чтобы получить токен доступа и обновления. Согласно документам Microsoft 365, нам нужно использовать область «offline_access», чтобы получить токен обновления вместе с токеном доступа. Однако ответ, который я получаю, не содержит токена обновления.

Вот код, который я использовал:

    url = "https://login.microsoftonline.com/{}/oauth2/v2.0/token".format(tenant_id)

    headers = {
        "Content-Type": "application/x-www-form-urlencoded",
    }

    data = {
        "client_id": client_id,
        "client_secret": client_secret,
        "grant_type": "client_credentials",
        "scope": "https://graph.microsoft.com/.default offline_access",
    }

    response = requests.post(url, headers=headers, data=data)

Ответ содержит маркер доступа, как обычно, но не содержит маркер обновления, несмотря на использование области offline_access. Может ли кто-нибудь любезно сказать мне, в чем проблема?

Просто заметка. Разрешения области уже предоставлены приложению на портале Azure.

archangel78 03.02.2023 08:22
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
76
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы используете поток учетных данных клиента. Он не возвращает токен обновления, потому что он вам не нужен.

Токены обновления используются, когда пользователь входит в ваше приложение. Поскольку повторная проверка подлинности потребует, чтобы пользователь снова вошел в систему, вместо этого вы получаете токен обновления, чтобы получить новые токены.

Но в случае с учетными данными клиента повторная аутентификация — это просто повторная отправка того же запроса. Токен обновления ничего не добавит к этому. Отправьте тот же запрос еще раз до истечения срока действия вашего токена.

Ответ принят как подходящий

Я согласен с @junnas Client Credential Flow, который не возвращает токен обновления, так как взаимодействие с пользователем отсутствует.

Я попытался воспроизвести то же самое в своей среде и получил результаты, как показано ниже:

Чтобы получить токен обновления, вам нужно выбрать пользовательские интерактивные потоки, такие как Auth-Code Flow.

Я создал приложение Azure AD и добавил разрешения API, как показано ниже:

Я сгенерировал код авторизации, используя следующую конечную точку:

https://login.microsoftonline.com/TenantID/oauth2/v2.0/authorize? 
client_id=ClientID
&response_type=code  
&redirect_uri=https://jwt.ms
&response_mode=query  
&scope=https://graph.microsoft.com/.default offline_access
&state=12345

Я сгенерировал токен доступа и токен обновления, используя следующие параметры:

GET https://login.microsoftonline.com/TenantID/oauth2/v2.0/token

client_id:ClientID
client_secret:ClientSecret
scope:https://graph.microsoft.com/.default offline_access
grant_type:authorization_code
redirect_uri:redirectURi
code:code

Используя сгенерированный выше токен обновления, я успешно обновил токен доступа, как показано ниже:

GET https://login.microsoftonline.com/TenantID/oauth2/v2.0/token

client_id:ClientID
grant_type:refresh_token
refresh_token:xxx
client_secret:xxx

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