如何从已登录的用户获取“ B2C JWT访问令牌”?

时间:2019-06-20 19:36:29

标签: c# asp.net-mvc asp.net-core jwt azure-ad-b2c

我正在使用.Net Core Web API和.Net Core Web MVC应用程序。他们都使用Azure AD B2C对用户进行身份验证。但是,为了从Web API获得HttpRequest的响应,我需要为我的Web MVC应用程序上的已登录用户提供来自B2C的JWT访问令牌。有没有一种方法可以使用经过身份验证的“用户”在控制器内部获取此访问令牌。

我尝试访问已登录用户的声明,但是没有运气,我还使用jwt.ms回顾了B2C工作流程运行良好,并且正在生成JWT令牌并且它也正常工作。 MVC应用程序正在对用户进行身份验证,并且Web API与硬编码令牌一起正常工作。我只需要从已登录的用户获取访问令牌,而不是对其进行硬编码。

我希望能够获得B2C JWT访问令牌,以便以后将其传递给Web Api并能够保护我的请求。

3 个答案:

答案 0 :(得分:2)

从MS AzureADB2C.UI GitHub团队获得一些帮助后,我们得以解决此问题。问题是默认情况下令牌没有保存在库中,因此我们需要配置OIDC以指定令牌必须保存以供将来在应用程序中使用。这就是“启动”配置的示例代码,以及如何从控制器查询“ JWT访问令牌”的示例。

Startup.cs:

    services.Configure(AzureADB2CDefaults.OpenIdScheme, options => {
            options.SaveTokens = true;
    });

控制器:

    string idToken = await HttpContext.GetTokenAsync("id_token");

有关如何解决该问题的更多信息,请参见以下链接: https://github.com/aspnet/AspNetCore/issues/11424

答案 1 :(得分:1)

您可以参考this sample application

它使用the ASP.NET Core Azure AD B2C middleware来验证最终用户,并使用MSAL.NET来获取,缓存和刷新访问令牌。

访问令牌是在the AzureADB2COpenIdConnectOptionsConfigurator class中获取的。

引用访问令牌的控制器方法的代码示例为here

答案 2 :(得分:0)

您需要的是实际的令牌字符串吗?如果是这样,您可以在控制器内使用HttpContext访问标头吗? HttpContext将具有传入的标头的集合