从Azure广告B2C帐户访问Azure Blob存储和密钥库

时间:2020-06-02 11:59:12

标签: azure azure-active-directory azure-keyvault azure-blob-storage

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

从该应用程序中我需要的是:

  • 将文件上传到Blob
  • 从Blob下载文件
  • 从Blob删除文件
  • 生成SAS
  • 从Key Vault获得秘密的价值。

在Azure AD租户中,它可以正常工作。我可以要求login.microsoftonline.com输入凭据并获得令牌到我的后端,以完成上面列出的所有操作。但是后来客户愿意使用自定义UX(隐藏Microsoft登录页面),只有一种方法是使用B2C和本地帐户。

我在这里tutorial-create-tenant做了一个B2C租户

此处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与我注册应用程序时组织使用的 APIs 选项卡中的Azure存储API相同,“ scp”为“ user_impersonation”。但是使用此令牌,我无法使用邮递员访问存储(我将其用作不记名令牌) 例如,对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存储user_impersonation选项的“ Api权限”页面上,您可以看到类似的链接

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.

似乎我需要获得App的其他权限? 是否有意义?还是尝试访问特定的存储帐户是错误的?

0 个答案:

没有答案