首页 > 解决方案 > 从 Azure 广告 B2C 帐户访问 Azure Blob 存储和 Key Vault

问题描述

我是 Azure 的新手。如果问题很愚蠢,请不要惩罚我。我在 Azure 中制作了一个应用程序来访问存储 blob 和密钥保管库。我使用了 Azure AD 租户(带有 AD 用户)和 user_impersonation 范围,例如https://storage.azure.com/user_impersonationhttps://vault.azure.net/user_impersonation

我需要从那个应用程序是:

在 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.

看起来我需要获得应用程序的额外权限?是否有意义?或者试图访问特定的存储帐户是错误的?

标签: azureazure-active-directoryazure-keyvaultazure-blob-storage

解决方案


推荐阅读