从 ASP.NET Core 中的 azure B2C 应用程序请求 JWT

Posted

技术标签:

【中文标题】从 ASP.NET Core 中的 azure B2C 应用程序请求 JWT【英文标题】:Request a JWT from azure B2C application in ASP.NET Core 【发布时间】:2021-02-01 23:18:19 【问题描述】:

我有两个 API。

    管理 API (.NET Core API) 医疗保健 API(Azure 函数 API)

我需要在 Healthcare API 中调用一个端点,它应该从管理 API 中调用。我知道最好的方法是使用 gRPC,但现在没有时间。

Healthcare API 已通过 azure b2c 应用程序进行授权。管理员 API 已通过另一个 azure b2c 应用程序进行授权。因此,由于此授权,我无法从 Admin API 调用 Healthcare API。 (不能使用允许匿名,因为它是一个 azure 函数 API)

我想到的一个解决方案是从用于授权医疗保健 API 的 b2c 应用程序中获取 Admin API 中的 jwt 令牌。但是知道如何做到这一点。

上面的解决方案好不好?并且可行吗?有什么方法可以在不进入 gRPC 的情况下做到这一点?

提前致谢。

【问题讨论】:

也许本指南将有助于您完成该过程:获取 JWT 令牌并访问受 B2C 保护的医疗保健 API:docs.microsoft.com/en-us/azure/active-directory-b2c/… @StanleyGong 问题是这两个 API 被两个不同的 B2C 应用程序授权。 怎么样?您的问题解决了吗? @StanleyGong 先生还没有。我正在尝试这个。 docs.microsoft.com/en-us/azure/active-directory/develop/… Azure B2C 也有问题。它不支持客户端凭据授予类型。尝试一些解决方法 【参考方案1】:

如果这 2 个 B2C 应用属于同一个 B2C 租户,而您只是想让 admin API 来调用 Healthcare API,也许您可​​以只使用 OAuth 2.0 客户端凭据授予流程。

虽然 Azure AD B2C 身份验证服务当前不直接支持 OAuth 2.0 客户端凭据授予流程,但您可以使用 Azure AD 和 Microsoft 身份平台/令牌端点为 Azure AD B2C 中的应用程序设置客户端凭据流租户。 Azure AD B2C 租户与 Azure AD 企业租户共享一些功能。

如下:

【讨论】:

B2C 不支持客户端凭证流,对吧? 不是,但实际上 B2C 继承了部分 Azure AD 功能,因此您可以在 B2C 中使用客户端凭据流,就像在常见的 Azure AD 中使用它一样。 我试过这个方法。当我使用 'graph.microsoft.com/.default' 作为范围时,我得到了一个令牌。但是有了那个令牌,我就不能调用 API。仍然得到 401。当我使用“tenant.onmicrosoft.com/lab-api/read”时,出现错误提示“AADSTS70011:提供的请求必须包含“范围”输入参数。为输入参数“范围”提供的值无效” 然后我使用了tenant.onmicrosoft.com/lab-api/.default。这也给出了 401

以上是关于从 ASP.NET Core 中的 azure B2C 应用程序请求 JWT的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Asp.net Core 中的查询字符串验证 Azure AD B2C 令牌?

ASP.NET Core 2.2 中的 Azure AD 身份验证

ASP.NET Core 应用程序日志未写入 Azure 应用服务中的 Blob

从 Azure 中托管的 ASP.NET Core 5.0 MVC 站点调用 API/服务的间歇性套接字异常

交换 Azure Web App 部署槽会注销 ASP.NET Core RC2 中的所有用户

如何将图像从 Asp.net Core IFormFile 上传到 Azure Blob 存储?