Ошибка проверки маркера доступа Microsoft Graph API

Я использую этот URL, чтобы получить id_token:

https://login.microsoftonline.com/common/oauth2/authorize?
response_type=id_token%20code&
client_id=MY_CLIENT_GUID_ID_IN_HERE&
redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Fopenid%2Freturn&nonce=alfaYYCTxBK8oypM&
state=6DnAi0%2FICAWaH14e

и этот возвращаемый результат, как это

http://localhost:3000/auth/openid/return?
code=AAA_code_in_here&
id_token=eyJ0eXAi_xxxx_yyyy_in_here&
state=6DnAi0%2FICAWaH14e&
session_state=xxxx_guid_xxxxx

а потом я используюid_token запросить график (используйте POST man)

я видел этот постПроблемы InvalidAuthenticationToken и CompactToken - Microsoft Graph с использованием PHP Curl но не имеет смысла.

Ответы на вопрос(4)

когда я играл в Graph API, проблема в моем случае заключалась в том, как я генерировал токен.

Я использовал почтальон для генерации токена, в котором в разделе URL авторизации я добавлял resource = client_id, тогда как это должен быть URL графика. После внесения этого изменения я смог позвонить через почтальона.

Чтобы вышеперечисленное сработало, убедитесь, что вашему приложению в Azure делегированы разрешения на доступ к Graph API.

Следующим шагом является преобразование этого кода OATUH в токен на предъявителя. Это тот шаг, который вам здесь не хватает.

Я также рекомендовал бы использоватьКонечная точка v2 с которым намного проще работать (особенно с Graph). Я написалv2 Endpoint Primer который проходит через процесс и может быть полезным.

 Redman17 июн. 2016 г., 05:39
Я использую конечную точку v1, не могли бы вы также увидеть этот вопрос?stackoverflow.com/questions/37872642/...
 Marc LaFleur17 июн. 2016 г., 18:50
Тот же рабочий процесс (redirect-> code-> token) применяется к v1. Причина, по которой я рекомендую v2, заключается в том, что его гораздо проще поддерживать, а области определяются самим приложением, а не регистрационной записью.

код Вы получаете ответ URL в токен.

Вот мой код C # (с использованием Microsoft.IdentityModel.Clients.ActiveDirectory)

      public static AuthenticationResult ExchangeCodeForToken(string InTenantName, string InUserObjId, string InRedirectUri, string InApplicationAzureClientID, string InApplicationAzureClientAppKey)
      {
                Check.Require(!string.IsNullOrEmpty(InTenantName), "InTenantName must be provided");
                Check.Require(!string.IsNullOrEmpty(InUserObjId), "InUserObjId must be provided");

                if (CanCompleteSignIn) //redirect from sign-in
                {
                    var clientCredential = new ClientCredential(InApplicationAzureClientID, InApplicationAzureClientAppKey);
                    var authContext = new AuthenticationContext(Globals.GetLoginAuthority(InTenantName), (TokenCache)new ADALTokenCache(InUserObjId)); //Login Authority is https://login.microsoftonline.com/TenantName
                    return authContext.AcquireTokenByAuthorizationCode(VerificationCode, new Uri(InRedirectUri), clientCredential, Globals.AZURE_GRAPH_API_RESOURCE_ID); //RESOURCE_ID is "https://graph.microsoft.com/"
                }

                return null; 
       }
 Mark Szabo06 авг. 2017 г., 01:20
Э-э-э, ты только что спас мой день! Я работал над этим в течение 4 дней! Спасибо!

вам ничего не нужно со стороны сервера, вы можете реализовать oAuth2 только со стороны клиента.

Используйте следующий URL для входа в систему:

https://login.microsoftonline.com/common/oauth2/authorize?client_id=YOUR_CLIENT_ID&resource=https://graph.microsoft.com&response_type=token&redirect_uri=YOUR_REDIRECT_URI&scope=User.ReadBasic.All

После успешного входа пользователь будет перенаправлен на страницу с параметром access_token. Затем используйте следующий вызов AJAX для получения информации о пользователе:

var token = login_window.location.href.split('access_token=').pop().split('&')[0];
$.ajax({
    url: "https://graph.microsoft.com/v1.0/me",
    type: "GET",
    beforeSend: function(xhr){xhr.setRequestHeader('Authorization', 'Bearer '+token);},
    success: function(data) {
      alert('Hi '+data.displayName);
      console.log(data);
    }
});

Обратите внимание, что вам может потребоваться включитьoauth2AllowImplicitFlow: правда настройки из файла манифеста приложения Azure Active Directory.

Установите «oauth2AllowImplicitFlow»: false в «oauth2AllowImplicitFlow»: true.

Наконец, убедитесь, что ваше приложение имеетнеобходимые разрешения заMicrosoft Graph которыевход пользователей а такжеПросмотреть основной профиль пользователя

Ваш ответ на вопрос