Reactjs 通过Auth0 React&;授权然后使用JWT令牌;ASP.net内核
我正在构建一个react应用程序,使用Auth0作为oauth身份验证,并使用ASP.NET核心api为其提供支持 从React,我将用户重定向到Auth0,我已经设置了一个单页应用程序 登录成功后,它会使用代码将用户重定向回我的React应用程序 然后我想将该代码转换为JWT令牌以授权对后端api的访问,这就是它失败的地方 登录后,我使用Auth0提供的示例库并调用: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
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的完整版本。这就是我们想要的答案