Azure приложение oauth2 генерирует неверный токен доступа в типе предоставления учетных данных клиента - PullRequest
1 голос
/ 20 марта 2020

Я новичок в использовании Azure AD с OAuth2. Я развернул пример WEB API в моем Azure AD. Я использую свой WEB API через приложение Postman. Прежде чем использовать WEB API в Postman, мне нужно сгенерировать токен доступа. Но когда я генерирую токен доступа в почтовом отделе, он всегда принимает Grant Type - Authentication Code. Когда я изменяю значение на Client Credentials, сгенерированный токен доступа не принимается в API. он показывает сообщение UnAuthorized.

В портале Azure - окно настроек приложения "Сертификаты и секреты". Я создаю секрет клиента с описанием "почтальон". Я не загружал сертификат в это приложение.

Я хочу сгенерировать токен доступа со значением «Тип предоставления» «Учетные данные клиента». Есть ли дополнительная конфигурация для этого?

1 Ответ

1 голос
/ 20 марта 2020

Is there any additional configuration for this ?

Нет, никаких дополнительных настроек для генерации токена с помощью client_credentials.

Вам всем нужен следующий параметр:

  1. client_id
  2. client_secret
  3. resource (For v2.0 scope)
  4. grant_type

Как бы вы запросили токен в PostMan:

Your Token Endpoint:

https://login.microsoftonline.com/YourTenent.onmicrosoft.com/oauth2/token Method Type: POST

Request Body:

grant_type:client_credentials

client_id:00ab01_Your_Azure-Ad_Application_Id_fbbf8e

client_secret:XNk2zgXx_Your_Azure-Ad_Application_Secret_vjdz2Q

resource:https://graph.microsoft.com/

См. Скриншот:

enter image description here

Фрагмент кода:

  //Token Request End Point
    string tokenUrl = $"https://login.microsoftonline.com/YourTenant.onmicrosoft.com/oauth2/token";
    var tokenRequest = new HttpRequestMessage(HttpMethod.Post, tokenUrl);

    //I am Using client_credentials as It is mostly recommended
    tokenRequest.Content = new FormUrlEncodedContent(new Dictionary<string, string>
    {
        ["grant_type"] = "client_credentials",
        ["client_id"] = "b6695c7be_YourClient_Id_e6921e61f659",
        ["client_secret"] = "Vxf1SluKbgu4PF0Nf_Your_Secret_Yp8ns4sc=",
        ["resource"] = "https://graph.microsoft.com/" 
    });

    dynamic json;
    AccessTokenClass results = new AccessTokenClass();
    HttpClient client = new HttpClient();

    var tokenResponse = await client.SendAsync(tokenRequest);

    json = await tokenResponse.Content.ReadAsStringAsync();
    results = JsonConvert.DeserializeObject<AccessTokenClass>(json);

Используемый класс:

public class AccessTokenClass
   {
        public string token_type { get; set; }
        public string expires_in { get; set; }
        public string resource { get; set; }
        public string access_token { get; set; }
   }

Надеюсь, что это поможет. Если у вас все еще есть проблемы, не стесняйтесь поделиться.

...