Я пытаюсь получить доступ к хранилищу таблиц Azure с помощью класса ТаблицаКлиент, но хочу пройти аутентификацию с использованием учетных данных AzureAD во всплывающем окне браузера.
Я пробовал 2 подхода и уверен, что все правильно настроено в Azure, но я просто продолжаю получать
This request is not authorized to perform this operation using this permission.
Вот тестовый код 1 с использованием МСАЛ
let app = PublicClientApplicationBuilder.Create("---registered app ID---")
.WithAuthority(AzureCloudInstance.AzurePublic, "---tennant id----" )
.WithDefaultRedirectUri()
.Build()
let! ar = app.AcquireTokenInteractive(["https://storage.azure.com/user_impersonation"]).ExecuteAsync()
let tokenCredential = { new TokenCredential() with
member x.GetTokenAsync(_,_) = task {return AccessToken(ar.AccessToken, ar.ExpiresOn)} |> ValueTask<AccessToken>
member x.GetToken(_,_) = AccessToken(ar.AccessToken, ar.ExpiresOn)}
let tc = new TableClient(Uri("https://--endpoint---.table.core.windows.net/"), "--Table--", tokenCredential)
и тест 2 с использованием Azure.Identity
let io = new InteractiveBrowserCredentialOptions(ClientId = "---registered app ID---", RedirectUri = Uri("https://login.microsoftonline.com/common/oauth2/nativeclient"))
let tc = new TableClient(Uri("https://--endpoint---.table.core.windows.net/"), "--Table--", new InteractiveBrowserCredential(io))
У меня есть приложение, зарегистрированное в Azure, и я добавил разрешения API для хранилища Azure с согласия администратора. Моя учетная запись является администратором службы для арендатора, поэтому у меня есть полный доступ к учетной записи хранения. Я просмотрел все документы, но просто не вижу, чего мне не хватает.
Для доступа к данным таблицы с использованием учетных данных Azure AD вашей учетной записи пользователя должна быть назначена роль Storage Table Data Contributor
или Storage Table Data Reader
.
Назначьте одну из этих ролей своей учетной записи пользователя и повторно получите токен. Вы не должны получить ошибку, которую вы получаете тогда.
Да, это было так. Я сделал предположение, что если я был ServiceAdmin, то по умолчанию у меня был доступ R/W. Очевидно нет.