Reactjs 通过Auth0 React&;授权然后使用JWT令牌;ASP.net内核

Reactjs 通过Auth0 React&;授权然后使用JWT令牌;ASP.net内核,reactjs,asp.net-core,access-token,auth0,bearer-token,Reactjs,Asp.net Core,Access Token,Auth0,Bearer Token,我正在构建一个react应用程序,使用Auth0作为oauth身份验证,并使用ASP.NET核心api为其提供支持 从React,我将用户重定向到Auth0,我已经设置了一个单页应用程序 登录成功后,它会使用代码将用户重定向回我的React应用程序 然后我想将该代码转换为JWT令牌以授权对后端api的访问,这就是它失败的地方 登录后,我使用Auth0提供的示例库并调用: const { getTokenSilently } = useAuth0(); ... var token

我正在构建一个react应用程序,使用Auth0作为oauth身份验证,并使用ASP.NET核心api为其提供支持

从React,我将用户重定向到Auth0,我已经设置了一个单页应用程序

登录成功后,它会使用代码将用户重定向回我的React应用程序

然后我想将该代码转换为JWT令牌以授权对后端api的访问,这就是它失败的地方

登录后,我使用Auth0提供的示例库并调用:

   const { getTokenSilently } = useAuth0();
   ...
   var token = await getTokenSilently();
   ...
   axios({
            url: `/api/Folder`,
            method: 'GET',
            headers: {
                Authorization: `Bearer ${token}`
            }
   })
它确实提供了一个令牌,但对于JWT令牌来说,该令牌似乎太小了,它在标头中看起来像这样:

Authorization:Bearer 7hExNvsOM14TpY0qUnPbVqpizwLLxynw

我的C#asp.net核心api的响应是:

www-authenticate:Bearer error=“无效的\u令牌”

我的C#代码如下所示: startup.cs

    services.AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    }).AddJwtBearer(options =>
    {
        options.Authority = Configuration["Auth0:Authority"];
        options.Audience = Configuration["Auth0:Audience"];
        options.RequireHttpsMetadata = false;
        options.TokenValidationParameters = new TokenValidationParameters
        {
            NameClaimType = ClaimTypes.NameIdentifier
        };
    });

    IdentityModelEventSource.ShowPII = true; //for debug purposes
    ....
    app.UseAuthentication();
    app.UseAuthorization();
folderController.cs

[Authorize]
[Route("api/[controller]")]
[ApiController]
public class FolderController : ControllerBase
{
 ....
}

您可以参考以下文章,其中提供了有关如何验证用户身份和获取访问令牌以访问asp.net核心web api的详细步骤:

一般来说,您应该在react应用程序-set correct
acquisition
值中使用Auth0对用户进行身份验证时获取访问令牌,该值包含react身份验证配置中注册的API的唯一标识符


因此,在身份验证期间,将要求用户授予访问web api的权限,如果用户同意,react sdk将获取访问令牌并保存到react应用程序中的本地存储

您在问题中提到的标记是一个标记

JSON Web令牌(JWT):符合JSON Web令牌的令牌 标准并包含以下形式的实体信息: 声称。它们是自给自足的,因为它不是 收件人呼叫服务器以验证令牌。已发行的访问令牌 用于Auth0管理API和为任何自定义 已向Auth0注册的API将遵循JSON Web标记 (JWT)标准,这意味着其基本结构符合 典型的JWT结构,它们包含关于令牌本身的标准JWT声明

不透明令牌:专有格式的令牌,通常包含 服务器持久存储中信息的某些标识符。到 验证不透明令牌时,令牌的收件人需要调用 颁发令牌的服务器。不透明访问令牌是 无法访问的格式。Auth0发布的不透明访问令牌可以是 与/userinfo端点一起使用以返回用户的配置文件

更多信息

为了克服它。。。您需要设置API项目@Auth0

调用Auth0对用户进行身份验证时,相应地传递
访问者
范围

访问群体
是您在Auth0仪表板上设置ASP.NET Web核心API时给它起的友好名称


这是.NET Core 3的完整版本。

这就是我们想要的答案