我是Azure的新手。如果问题很愚蠢,请不要惩罚我。 我在Azure中制作了一个应用程序,以访问存储Blob和密钥库。 我使用了Azure AD租户(带有AD用户)和user_impersonation范围,例如https://storage.azure.com/user_impersonation和https://vault.azure.net/user_impersonation
从该应用程序中我需要的是:
在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的其他权限? 是否有意义?还是尝试访问特定的存储帐户是错误的?