Я работаю с REST API Power Bi, для чего мне нужен рекламный токен Azure.
Я установил приложение в Azure AD и настроил его как.
а. Я намерен использовать этот токен доступа в своем приложении для реагирования, поэтому я настроил его как SPA. б. я разрешил поток публичного клиента. ** Я не проверял флажки «токен доступа» и «токен идентификатора», так как использую msal 2.0.
в. также указали URI перенаправления как http://localhost:4200 д. также дал ему все разрешения, необходимые мне для доступа к моему контенту powerbi (мне нужен «Dataset.ReadWrite.All)
ЭТО КОНЕЧНЫЕ ТОЧКИ ПРИЛОЖЕНИЯ AZURE
Я УСТАНОВИЛ СВОЕ ПРИЛОЖЕНИЕ REACT КАК: Я использую библиотеки @azure/msal-browser и @azure/msal-react.
Это мой объект msalConfig-
const configuration: Configuration = {
auth: {
clientId: "myclientidhere",//,
authority: "https://login.microsoftonline.com/mytenantidhere",
redirectUri: "http://localhost:4200/",
},
cache: {
cacheLocation: "localStorage",
storeAuthStateInCookie: false,
},
}
и это моя область:
export const loginRequest = {
scopes: ["Dataset.ReadWrite.All"]
};
после запуска приложения я вижу всплывающее окно авторизации. я положил свои учетные данные в нем. и вдруг он выдает эту ошибку-
invalid_client: AADSTS650053: The application 'dashboard.xyz.work' asked for scope 'Dataset.ReadWrite.All' that doesn't exist on the resource '00000003-0000-0000-c000-000000000000'. Contact the app vendor. Trace ID: 77e47883-fdd3-444a-bdd3-9f3a53bc1500 Correlation ID: aa77d724-0d9f-41aa-8e47-251c6b6f9293 Timestamp: 2023-02-09 13:51:46Z
я предоставил такое же разрешение в своем рекламном приложении Azure. однако моему приложению не было предоставлено «согласие администратора», но моя учетная запись как пользователь имеет разрешение на использование этой области в powerbi.
ПРИМЕЧАНИЕ. Если я изменю свою область на «user.read» или любой другой ресурс API графа ms, я смогу получить токен доступа этой области для доступа к ресурсу API графа. но я не могу получить токен доступа для доступа к своим ресурсам powerbi.
В AZURE AD ВСЕ ВЫГЛЯДИТ ПРЕКРАСНО.
Я ГДЕ-ТО ПРОЧИТАЛ, ЧТО ЭТОТ РЕСУРС '00000003-0000-0000-c000-000000000000' указывает на ресурс graph.microsoft.com. и я нажимаю https://login.microsoftonline.com/{myTenantId}. это конечные точки моего приложения.
Я не уверен, относятся ли ресурсы powerbi к ресурсу graph.microsoft.com ('00000003-0000-0000-c000-000000000000)!!??
также на странице разрешений API моего приложения, которую я прочитал, они относятся к https://analysis.windows.net/powerbi/api, то есть 00000009-0000-0000-c000-000000000000??
я попал не в ту конечную точку или проблема в чем-то другом??
да вы правы. по умолчанию, если мы устанавливаем какую-либо область в лазурной рекламе без имени хоста, это по умолчанию рассматривается как разрешение API графа. если мы хотим использовать любую другую область службы Microsoft, нам нужно указать ее с именем хоста. так что в моем случае я написал https://analysis.windows.net/powerbi/api/dataset.ReadWrite.All
и это сработало. примечание: разные конечные точки предназначены для разных служб ms. это только для powerbi.
Я попытался воспроизвести то же самое в своей среде и получил ту же ошибку, что и ниже:
Чтобы устранить ошибку, попробуйте следующее:
Я создал приложение Azure AD SPA и добавил разрешения API:
Примечание. Обязательно укажите область действия как
https://analysis.windows.net/powerbi/api/Dataset.ReadWrite.All
для доступа к содержимому PowerBI
Я сгенерировал код авторизации, используя следующую конечную точку:
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://analysis.windows.net/powerbi/api/Dataset.ReadWrite.All
&state=12345
&code_challenge=codeChallenge
&code_challenge_method=S256
Поскольку согласие администратора на разрешения API не предоставляется, вы увидите экран согласия, как показано ниже:
Код авторизации был успешно сгенерирован без каких-либо ошибок, как показано ниже:
Теперь я сгенерировал токен доступа, используя следующие параметры:
https://login.microsoftonline.com/TenantID/oauth2/v2.0/token
grant_type:authorization_code
client_id:ClientID
scope:https://analysis.windows.net/powerbi/api/Dataset.ReadWrite.All
code:code
redirect_uri:https://jwt.ms
code_verifier:S256
Токен доступа успешно сгенерирован с областью действия Dataset.ReadWrite.All
, как показано ниже:
Чтобы устранить ошибку, измените код, как показано ниже:
export const loginRequest = {
scopes: ["https://analysis.windows.net/powerbi/api/Dataset.ReadWrite.All"]
};
Если проблема не устранена, попробуйте область действия как https://analysis.windows.net/powerbi/api/.default
.
вы спасли меня. ты спасаешь всех. большое большое спасибо
Рад, что проблема решилась :)
Я не разработчик React, но где-то вы должны установить область доступа для токена, и в этом случае это должно быть
https://analysis.windows.net/powerbi/api/.default
.