如何使用 B2C 和 Blazor 获取 JWT 不记名令牌
Posted
技术标签:
【中文标题】如何使用 B2C 和 Blazor 获取 JWT 不记名令牌【英文标题】:How Do I Get the JWT Bearer Token Using B2C and Blazor 【发布时间】:2020-03-18 18:22:43 【问题描述】:我使用 Visual Studio 模板创建了一个新的 Blazor 应用,在项目创建期间使用向导添加了 B2C。
所有功能都非常适合身份验证。我可以使用我最喜欢的身份提供者登录并接收 id_token。我不知道在哪里可以获得 id_token,但我可以在我的用户身份中看到声明。
我需要帮助的是如何获取声明中的信息来获取访问令牌。我需要这个令牌来调用我的端点。
这似乎应该是直截了当和常见的事情,但我似乎找不到任何好的例子。
在普通的 MVC 应用程序中,我可以通过 ConfidentialClientApplicationBuilder.AcquireTokenByAuthorizationCode 获取此信息,但这在 Blazor 中不起作用(除非我做错了什么)。
我试过这个:https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-access-tokens
我认为它会起作用。如何在我的 blazor 应用程序中获取“代码”(id_token)?这是在幕后解码的内容,我能找到的只是解码“代码”所产生的声明。
我已使用 azure 的“运行用户流程”访问示例 id_token("code") 并将其粘贴到我的项目中并在上面的链接中进行调用,它似乎可以工作。我遇到了权限问题,但这至少是一个成功的调用。
也许如果我可以访问 id_token 我可以让它从那里工作?
【问题讨论】:
我已经为此奋斗了好几个星期。当我读到你的“这似乎应该是简单而普通的事情......”时,我几乎要团结一致地哭了。是的,你认为它应该是。这是我 8 年开发过程中最令人沮丧的编码经历。 【参考方案1】:这似乎是一个客户端应用程序,类似于 SPA。在这种情况下,您必须使用隐式流,其中响应类型为“id_token 令牌”,并在一次调用中向浏览器返回一个 id 令牌和访问令牌。这不是一个确切的答案,但只有我们的 MSAL.js 库可以进行这种类型的调用,但 Blazor 似乎使用 C#,而 msal .net 不进行客户端身份验证调用。只要您将应用程序注册为本机应用程序,acquireTokenByAuthCode() 就可以在客户端工作,因此不需要密码。
【讨论】:
Jas,你有什么代码可以解释这个吗?我遇到了同样的问题,需要一些我可以解决的问题。 SPA 应用使用隐式流,.Net 使用验证码流:docs.microsoft.com/en-us/azure/active-directory-b2c/… 感谢 Jas 的指点。我希望有一个非 js 的例子。 Blazor 和所有的一切令人兴奋。也许没有,但我只需要认为有一个 .net 框架答案。这似乎是一种常见的情况。我不敢相信我在找到它时遇到了这样的问题。而且,你是对的。 Blazor 是一个客户端应用程序。它完全在客户端上运行。无需托管服务器。只是一个存储文件的地方。 Blazor 的另一大优势。 这个样本在任何地方都可以公开吗?草稿形式的活动? 还没有,不太确定状态。以上是关于如何使用 B2C 和 Blazor 获取 JWT 不记名令牌的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Azure AD B2C 保护 Blazor Wasm 应用访问的 Azure 函数?
使用 azure AD B2C 进行 blazor web api 身份验证
如何在没有 Microsoft 身份的情况下对 blazor 服务器进行 jwt 身份验证?