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

Is it possible to get access token for Azure Blob Storage using OAuth - Client Credential Grant Type?

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

我已经将其他 OAuth 凭据访问用于其他服务,例如 Authorization Code Grant (I can´t use it in this case because it needs a user to sign-in manually) and even Resource Owner Password Credential Grant(不推荐,但我同时管理服务和存储,因此可以实施。缺点是,应用程序以用户身份登录,我出于安全考虑,我宁愿不这样做。)

我已经按照 Microsoft´s guide 尝试实现这一目标,但仍然没有成功。按照指南在 Azure 中注册 API 时,我只能选择委托权限,而不能选择适合这些需求的应用程序权限,附上几个截图。

App registration in Azure Active Directory window

App registration options

所以,总而言之,我正在尝试实施 Client Credential 类型,但我无法获得有效令牌。是否可以使用这种类型获得授权?如果是的话,你能给我一个快速指南吗?

谢谢

你没有指出你的错误。如果它只是说访问被拒绝,那么只需将服务主体添加到您尝试访问的 blob 或存储帐户的 rbac 角色。那么您的应用程序应该有权调用存储

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

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

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

中的服务申请

然后我们在postman中使用client credential flow进行测试:

对了,你应该参考这个文档:here