Приложение Azure становится неавторизованным, даже когда я получаю токен

Начать с. Я новичок в платформе Azure. Пока я пытаюсь понять, как решить эту проблему.

private class TokenRequestTask extends AsyncTask<Void, Void, String> {

    @Override
    protected String doInBackground(Void... voids) {
        OkHttpClient client = new OkHttpClient();
        RequestBody formBody = new FormBody.Builder()
                .add("client_id", "{CLIENT_ID}")
                .add("client_secret", "{CLIENT_SECRET}")
                .add("scope", "https://api.businesscentral.dynamics.com/v2.0/.default")
                .add("grant_type", "client_credentials")
                .build();
        Request request = new Request.Builder()
                .url("https://login.windows.net/{TENANT_ID}/oauth2/v2.0/token")
                .post(formBody)
                .build();
        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful()) {
                String responseBody = response.body().string();
                String responseHeader = response.headers().toString();         
                JSONObject jsonObject = new JSONObject(responseBody);
                String accessToken = jsonObject.getString("access_token");
                SharedPreferences._instance.setToken(accessToken);
                return accessToken;
            } else {
                return "Request failed: " + response.code();
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "Request failed: " + e.getMessage();
        }
    }

    @Override
    protected void onPostExecute(String result) {
        // Handle the token or error response
        System.out.println(result);
    }
}

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

Эта задача запроса токена может получить токен. Но проблема в том, что мы пытаемся вызвать наш собственный API. Мы получаем 401, и ответ сообщает нам, что учетные данные недействительны.

URL-адрес выглядит примерно так

https://api.businesscentral.dynamics.com/v2.0/{TENANT_ID}/Production/api/effekt/timeReport/v2.0/companies({COMPANY_ID})

Созданное нами приложение, соответствующее CLIENT_ID и CLIENT_SECRET, имеет

Несмотря на все эти разрешения, он все равно получает ошибку 401. Что может быть не так? Есть ли способ узнать, какое разрешение необходимо? Или что нам нужно сделать

Декодированный токен

{
  "typ": "JWT",
  "alg": "RS256",
  "x5t": "L1KfKFI_jnXbwWc22xZxw1sUHH0",
  "kid": "L1KfKFI_jnXbwWc22xZxw1sUHH0"
}.{
  "aud": "https://api.businesscentral.dynamics.com",
  "iss": "https://sts.windows.net/{TENANT_ID}",
 ...
  "roles": [
    "Automation.ReadWrite.All",
    "app_access",
    "AdminCenter.ReadWrite.All",
    "API.ReadWrite.All"
  ],
...

  "ver": "1.0"
}.[Signature]

Вы хотите вызвать API Dynamics 365 Business Central или свой собственный API?

Rukmini 23.05.2024 05:32

Создайте роли приложения, предоставьте разрешения API для этих ролей приложения и сгенерируйте токен доступа.

Rukmini 23.05.2024 08:35

Это мой собственный API

Jemil Riahi 23.05.2024 09:00

Вы создавали роли приложений? и декодируйте токен доступа в jwt.ms и проверьте, содержит ли утверждение роли необходимые разрешения.

Rukmini 23.05.2024 09:01

Добавлены части декодированного токена.

Jemil Riahi 23.05.2024 09:37

Можете ли вы также прикрепить скриншот Expose a API?

Rukmini 23.05.2024 09:44

Не думаю, что мы что-то добавили в «Раскрыть API» (теперь мне трудно проверить, поскольку клиент не позволяет мне войти в систему самостоятельно, не поделившись экраном и не сообщив им, куда нажимать). Может ли быть там, что нам следует выставить собственный API?

Jemil Riahi 23.05.2024 09:48

Давайте продолжим обсуждение в чате.

Rukmini 23.05.2024 10:00
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
8
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Ошибка обычно возникает, если вы не добавляете приложение Microsoft Entra ID на портал Dynamics 365 Business Central и не предоставляете разрешения на портале D365.

Я создал приложение Microsoft Entra ID и предоставил разрешения API:

Теперь войдите на Портал Dynamics 365 Business Central -> Нажмите значок поиска -> Поиск приложений Microsoft Entra -> Создать.

Вставьте идентификатор клиента приложения Microsoft Entra и установите состояние «Включено» -> нажмите «ДА».

Во вкладке «Разрешения» дайте полный доступ:

Теперь войдите на Портал Dynamics 365 Business Central -> Настройки -> Центр администрирования.

И скопируйте TenantID и имя среды:

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

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

client_id:ClientID
client_secret:ClientSecret
grant_type:client_credentials
scope:https://api.businesscentral.dynamics.com/.default

Я могу успешно получить компании, как показано ниже:

GET https://api.businesscentral.dynamics.com/v2.0/TenantID/EnvironmentName/api/v2.0/companies

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