是否可以使用OAuth-客户端凭据授予类型获取Azure Blob存储的访问令牌?

时间:2020-07-13 14:13:47

标签: oauth-2.0 azure-active-directory azure-storage-blobs msal

我正在准备访问授权请求以便访问我在 Azure Blob 中的外部存储。我希望服务应用程序使用 OAuth 访问该存储,并且由于访问是由服务完成的(没有真正的用户执行该服务),因此我想使用Client Credential Grant type 。我正在使用Azure Active Directory管理用户以及应用程序的注册和权限,因此授权端点将是Azure,它将向我授予访问令牌。

我已将其他OAuth凭据访问用于其他服务,例如Authorization Code Grant(在这种情况下,因为它需要用户手动登录,所以我无法使用它)甚至Resource Owner Password Credential Grant(不是建议,但我同时管理服务和存储,以便可以实施。不利的是,该应用程序以用户身份登录,出于安全考虑,我不希望这样做。)

我一直遵循Microsoft´s guide来尝试实现这一目标,但还是没有运气。遵循指南并在Azure中注册API时,我只能选择“委派”权限,而不能选择“应用”权限来满足这些需求,而是附加了一些问题。

App registration in Azure Active Directory window

App registration options

总而言之,我正在尝试实现 Client Credential类型,但我无法获得有效的令牌。是否可以使用这种类型获得授权?如果可以,可以给我快速指南或其他内容吗?

谢谢

2 个答案:

答案 0 :(得分:1)

对于Azure存储,这可能与其他授权方法不同。您无法直接以API权限向服务应用程序授予“应用程序”权限。这是因为您的应用程序没有RBAC角色。

如果您准备访问Azure Blob中对外部存储的授权请求,请按照here进行以下操作:

Azure门户>存储帐户>搜索并选择存储帐户>访问控制(IAM)>添加角色分配以将服务主体添加到存储帐户中(这相当于您向服务应用程序授予application permissionsAPI permissions

然后我们使用client credential flow对邮递员进行测试:

enter image description here

顺便说一句,您应该参考此文档:here

答案 1 :(得分:0)

您没有指定错误。如果它只是说拒绝访问,则只需将服务主体添加到您尝试访问的Blob或存储帐户的rbac角色中即可。那么您的应用程序应具有调用存储的权限