【问题标题】:How to secure Azure functions with OAuth for both humans and machines?如何使用 OAuth 为人和机器保护 Azure 功能?
【发布时间】:2020-03-04 21:19:13
【问题描述】:

我有一个 Azure Functions 应用程序,机器(客户端凭据流)和人类(授权代码流)都需要能够授权/验证。

最初我使用easy-auth、Azures 开箱即用的解决方案来保护功能应用程序。但是,根据此https://stackoverflow.com/a/57357226/7411328,无法通过简单的身份验证使用客户端凭据流。虽然我不明白这是为什么。为什么不能通过一个应用注册对两个不同的流程使用相同的权限?

假设(可能是错误的)以上是正确的,我必须自己实现 JWT 验证。

是否有任何可靠的方法来判断 API 是由机器调用还是由人类调用?

我还应该使用两个单独的应用注册吗?

我对这些技术的理解可能不足以正确提出这个问题,如果我能做些什么来澄清这个问题,请告诉我。

【问题讨论】:

    标签: oauth jwt azure-active-directory jwt-auth easy-auth


    【解决方案1】:

    据我所知,您可以使用客户端凭据流调用受easy-auth(AAD作为身份验证提供者)保护的Azure函数。一般情况下,您可以尝试以下步骤:

    1. 注册 Azure AD 应用程序
    2. 通过以下请求从 Azure AD 获取访问令牌:

    网址:

    POST https://login.microsoftonline.com/<your tenant ID/name>/oauth2/token
    

    标题:

    Content-Type: application/x-www-form-urlencoded
    

    主体:

    client_id=<your new resistered app ID>&
    client_secret=<your new resistered app secret>&
    resource=<your Azure function app ID which configed at easy-auth>&
    grant_type=client_credentials
    

    结果:

    使用此访问令牌调用 Azure 函数:

    如果您使用的是 Azure AD b2c,请向我提供更详细的信息,我会为您做一些研究。

    【讨论】:

    • 我很难发现 AAD 和 AAD B2C 之间的区别......但如果我理解正确,那就是我正在使用的。要完成这项工作,您是否必须分配应用程序权限?
    • 也谢谢你!关于B2C。我的 API 应该只可供我们 AAD 中的用户访问。我有一个单一的应用程序注册,它公开了一个名为 user_impersonation 的单一范围的 API。注册还具有图形 API 的 User.Read 权限。这有帮助还是我应该提供任何其他信息?
    • 你是对的,我再次尝试使用客户端凭据流,它按预期工作。
    • 令牌如何在 .net 核心的后端得到验证?您使用什么身份验证方案?是 [HttpTrigger(AuthorizationLevel.System, "get", Route = null)] HttpRequest req, ILogger log) 在您提供的链接的屏幕截图中,不清楚令牌是如何得到验证的。我将范围用作:api:///.default
    猜你喜欢
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 2022-07-21
    • 2017-12-11
    • 2016-12-05
    相关资源
    最近更新 更多