azure - 从 Azure 广告 B2C 帐户访问 Azure Blob 存储和 Key Vault
问题描述
我是 Azure 的新手。如果问题很愚蠢,请不要惩罚我。我在 Azure 中制作了一个应用程序来访问存储 blob 和密钥保管库。我使用了 Azure AD 租户(带有 AD 用户)和 user_impersonation 范围,例如https://storage.azure.com/user_impersonation 和https://vault.azure.net/user_impersonation
我需要从那个应用程序是:
- 将文件上传到 Blob
- 从 Blob 下载文件
- 从 Blob 中删除文件
- 生成 SAS
- 从 Key Vault 获取机密值。
在 Azure AD 租户中,它工作正常。我可以请求 login.microsoftonline.com 输入凭据并将令牌获取到我的后端以执行上面列出的所有这些事情。但后来客户决定使用自定义 UX(隐藏 Microsoft 登录页面),只有一种方法是使用 B2C 和本地帐户。
我在这里创建了一个 B2C 租户tutorial-create-tenant
像这里一样注册应用程序tutorial-register-applications并从我的组织使用的 API选项卡向 Azure 存储添加Api 权限
创建用户流,如这里user-flows
具有所有者策略的一组中的所有本地用户
使用这个请求我得到了一个令牌
https:/<domain_name>.b2clogin.com/<domain_name>.onmicrosoft.com/oauth2/v2.0/authorize?
p=B2C_1_signin&
client_id=<App_ID>&
nonce=defaultNonce&
redirect_uri=https%3A%2F%2Fjwt.ms%2F& // https://jwt.ms/
scope=https%3A%2F%2Fstorage.azure.com%2Fuser_impersonation& // https://storage.azure.com/user_impersonation
response_type=token&
prompt=login
在解码的令牌声明中,“aud”的 ID 与我的组织在注册 App 时使用的 API 中的 Azure 存储 API 相同,“scp”是“user_impersonation”。但是使用此令牌我无法使用 Postman 访问存储(我将其用作承载令牌)例如对 https://.blob.core.windows.net/?comp=list 的 GET 请求必须返回带有列表的 json容器(在 Azure AD 中它可以工作)但使用此令牌时出现错误
<Error>
<Code>AuthenticationFailed</Code>
<Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId:49873755-401e-0065-0dd0-386211000000
Time:2020-06-02T11:24:57.3079213Z</Message>
<AuthenticationErrorDetail>Signature validation failed. Signature key not found.</AuthenticationErrorDetail>
</Error>
可能我需要以某种方式添加对存储应用程序的额外 Api 访问权限吗?我应该设置什么?或者也许有一种方法可以将 Ad B2C 租户连接到 AD 租户?将不胜感激任何帮助。
更新:正如@juunas 所说,我对 B2C 租户和存储帐户有不同的订阅。现在 b2c 和存储在一个子中(我创建了新的 b2c,链接订阅并将其移动到 b2c 租户中,之后我在移动订阅中创建了一个存储帐户)
但问题依然存在。
我试图改变请求的范围。在 Azure Storage user_impersonation 选项的 Api Permissions 页面上,您可以看到类似的链接
https://*.dfs.core.windows.net/user_impersonation
当我将此链接用作范围时,我遇到了错误
AADB2C90117: The scope
'https://*.dfs.core.windows.net/user_impersonation'
provided in the request is not supported.
在链接中用存储帐户名称替换星号后,我收到下一条消息
AADB2C90205: This application does not have sufficient permissions
against this web resource to perform the operation.
看起来我需要获得应用程序的额外权限?是否有意义?或者试图访问特定的存储帐户是错误的?
解决方案
推荐阅读
- php - 计算时间值的 SUM() 以字符串形式返回时间值
- flutter - 颤振运行失败并获取与位置相关的问题
- javascript - 从 MUI 中删除 LoadingButton?
- python - 对 1 或 0 python 的数据进行相关性分析的最佳方法
- android - 将 AIDL 升级到计费 4.0 会导致:此版本的应用程序未配置为通过 Google Play 计费
- elixir - 如何取回用于启动 DynamicSupervisor 孩子的初始参数?
- javascript - 设置状态为异步时如何立即将变量的值存储在状态中
- django - Django 丢失会话数据
- javascript - 将日期分配给日期选择器
- python - 通过两个回调更新 Dash DataTable:按钮单击和间隔