C# 允许向api传递id_令牌而不是访问令牌

C# 允许向api传递id_令牌而不是访问令牌,c#,azure-ad-b2c,C#,Azure Ad B2c,我有一个旧的webapp,它有我需要继续支持的隐式流。我尝试使用Microsoft.Identity.Web 1.9.0.0,但它不允许我使用id_令牌它只需要授权标头中的访问令牌我收到以下错误消息: [10:09:31.861-04:00][ERR][]发生未经处理的异常 在执行请求时。System.UnauthorizedAccess异常: IDW10201:在承载令牌中未找到作用域或角色声明。 在 Microsoft.Identity.Web.MicrosoftIdentityWebAPA

我有一个旧的webapp,它有我需要继续支持的隐式流。我尝试使用Microsoft.Identity.Web 1.9.0.0,但它不允许我使用id_令牌它只需要授权标头中的访问令牌我收到以下错误消息:

[10:09:31.861-04:00][ERR][]发生未经处理的异常 在执行请求时。System.UnauthorizedAccess异常: IDW10201:在承载令牌中未找到作用域或角色声明。 在 Microsoft.Identity.Web.MicrosoftIdentityWebAPAuthenticationBuilderExtensions.c_uuDisplayClass3_1.d.MoveNext()

是否有允许的设置?我在JWTBearOptions或MicrosoftIdentityOptions中看不到一个。 当我使用Microsoft.AspNetCore.Authentication 3.1.0.0库时,它确实可以工作,但我希望有可能的最新库。任何建议都很好

编辑:更多详细信息

我们公司正在进行重大的技术转移。他在.net核心和web组件(聚合物)中为前端构建了很多东西。我们决定切换到Azure AD B2C。我们可以将.net核心和现有的polyymer UI切换到授权代码流。 我们在.NETWeb表单中拥有大量资产。这些Web表单是使用表单身份验证成员身份的大型项目。我们没有资源一次性将所有UI切换到Web组件和.net核心。计划是将身份切换到Azure AD B2C,并将其发布到生产环境中。当有更改请求或新功能请求时,我们将只使用HTML和Web组件(聚合)构建新页面,并使用.net核心api来处理这些api请求。问题是Web组件无法访问访问令牌

我找到的解决方案是,当Web表单从B2C获取响应时,我将OpenIdConnectAuthenticationNotifications连接到SecurityTokenReceived,后者读取IdToken,然后将其放入一个cookie中,并在30秒内过期,然后将其返回到浏览器。我有javascript代码,可以读取以查看cookie是否存在,并获取它并将其存储在会话存储中,然后删除cookie。此外,在加载时,浏览器会检查用户是否已登录,如果未登录,则会删除会话存储的id_令牌

这与预期的一样,但问题是它使用的是id_令牌,而不是授权代码流。因此,当访问任何其他api时,我不能从B2C请求其他api的令牌。此外,我无法获得刷新令牌(计划将其设置为8小时到期,这已经足够了)。我已经研究了是否有可能使它与代码流一起工作。我看过它在MVC中是如何工作的,但我没有让它工作,
这是我用来切换到B2C的项目

谢谢@greektreat和错误消息expect scope或roles in the Bear token,请遵循本文档了解隐式流与授权代码流的概念


如果您需要更多信息,请告知我们。

为什么要使用id\U令牌?id令牌和访问令牌的声明类似。谢谢。我确实理解隐式与授权代码流的概念。我为上下文添加了更多细节。如果这有助于找到更好的解决办法,我将非常感激