发送用户 ID 和 access_token

2024-01-14

我正在使用 React 前端在 ASP.NET Core 2.1 应用程序中实现 Auth0。

一旦用户进行身份验证,我就会得到access_token and an id_token。我的目的很明确access_token是授予对我的 API 方法的访问权限。我也明白,id_token提供我可以在前端应用程序中使用的用户数据。

问题/担忧是关于发送用户数据,例如userId当我进行 API 调用时到我的后端。除了包括userId在我的身体里POST请求,是否有其他方法将其发送到我的 API 方法?

在使用 Auth0 之前,我使用了一些其他解决方案JWT token我从他们那里收到的总是包括在内userId, username等等。我认为这是一种更安全的方法,因为即使人们可以看到 a 中的内容JWT token,签名使我们能够确保数据没有被篡改。

即使我的 API 调用是通过以下方式保护的SSL,我觉得包括userId与通过JWT token.

我在这里遗漏了什么还是我们确实发送了userId通过 API 调用中的常规方式,即在 a 的主体中POST调用或在 a 的查询字符串中GET call?


好问题,伙计,我上周遇到了同样的问题,最后用同样的方法解决了这个问题JWTAccessToken.

问题在于添加UserId生成可在服务器中检索的访问令牌时,将经过身份验证的用户作为声明。

添加访问令牌的声明

首先将用户的 ID 添加到您的声明列表中。

List<Claim> claims = new List<Claim>();
claims.Add(new Claim("UserId", user.Id.ToString()));

然后生成访问令牌。

SecurityToken token = new JwtSecurityToken(
                        issuer: {YOUR_ISSUER},
                        audience: {YOUR_AUDIENCE},
                        claims: claims,
                        notBefore: DateTime.UtcNow,
                        expires: DateTime.UtcNow.AddMinutes(60),
                        signingCredentials: credentials
                     );

假设您已经知道如何在达到最终代币生成之前执行这些步骤(从您的能力中扣除)oAuth and JWT上面显示了您的问题。

从访问令牌检索声明

阅读一个UserId从他们的 access_token 中,让我们创建几个帮助器/扩展方法来帮助我们从RequestContext控制器的。

public static string GetUserId(this ControllerBase controller)
{
    string securityKey = "{YOUR_SECURITY_KEY}";
    SymmetricSecurityKey key = new SymmetricSecurityKey(new UTF8Encoding().GetBytes(securityKey));
    JwtSecurityTokenHandler token_handler = new JwtSecurityTokenHandler();

    var tokenValidationParams = new TokenValidationParameters
    {
        ValidateAudience = false,
        ValidateIssuer = false,
        ValidateIssuerSigningKey = true,
        IssuerSigningKey = key,
        ValidateLifetime = false
    };

    string bearer = controller.HttpContext.Request.Headers["Authorization"].ToString().Replace("Bearer", string.Empty).Trim(' ');

    List<Claim> claims = token_handler.ValidateToken(bearer, tokenValidationParams, out SecurityToken token).Claims.ToList();

    Claim userClaim = claims.FirstOrDefault(x => x.Type == "UserId");

    if(userClaim != null)
    {
        return userClaim.Value;
    }
    else
    {
        throw new Exception("Invalid AccessToken. UserId claim not found");
    }
}

如何使用

现在让我们用它来获取UserId在我们的任何控制器中:

[Authorize]
public class ExampleController : Controller
{
    public IActionResult Index()
    {
        string userId = this.GetUserId();

        // --> continuing code goes here.
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

发送用户 ID 和 access_token 的相关文章

  • C# - 使用 Entity Framework Core 3 HasConversion 将字段转换为 .Net Core 3.1 中的 JSON

    我试图在项目中的所有模型之间动态完成转换 数据库上下文 cs protected override void OnModelCreating ModelBuilder modelBuilder var entityTypes modelBu
  • 如何在 GWT 中实现登录屏幕?

    我正在为后端应用程序编写一个小型 GWT 前端 我想知道 GWT 应用程序的最佳安全模型是什么 我正在考虑实现一种 RPC 方法 该方法从客户端网页接收用户密码的 MD5 然后将会话 ID 传回客户端页面 或失败代码 所有后续调用都将简单地
  • 从 ASP.NET Core 2.2 迁移到 3.1

    我们目前有一个ASP NET 核心 2 2我们想要迁移到的网络应用程序3 1 因为它较新并且包含一些增强功能 有关于迁移的文章2 2 to 3 0但不是2 2 to 3 1 是升级到的首选迁移途径3 0先升级到3 1 之间似乎有很多不兼容的
  • Net Core 错误名称“Ok”在当前上下文中不存在

    我收到以下错误 当前上下文中不存在名称 Ok 如何在我的控制器 API 中解决此问题 Return Ok 已嵌入控制器中 using System using System Collections Generic using System
  • 我们需要依赖注入的接口吗?

    我有一个 ASP NET Core 应用程序 该应用程序有一些帮助程序类可以完成一些工作 每个类都有不同的签名方法 我在网上看到很多 net core 示例 它们为每个类创建接口 然后向 DI 框架注册类型 例如 public interf
  • Polymer 1.0:用户身份验证 UX(建议、教程和示例)?

    是否有推荐的 聚合物方式 来进行用户身份验证 这个问题包括技术部分和用户体验 用于进行用户身份验证的用户体验的全面示例 和 或教程 将非常棒 注意 Polymer 入门套件不包含任何身份验证 UX 示例 在这个问题中 用户体验 的意思是 完
  • AWS Cognito 作为网站的 Django 身份验证后端

    我对 Cognito 的理解是 它可以用来代替本地 Django 管理数据库来对网站的用户进行身份验证 然而 我没有找到任何带有通过 Cognito 登录屏幕的基本 Hello World 应用程序的详细示例 如果有人可以发布一篇文章 逐步
  • 如何在 ASP.NET Core 中设置 cookie validateInterval?

    我正在尝试设置validateInterval对于 ASP NET 5 RC1 应用程序 它使用ASP NET Identity 3 我正在尝试实现代码this https stackoverflow com questions 33463
  • 如何使用多重身份验证 - firebase?

    我有一个注册屏幕 其中包含 用户名 电子邮件 电话号码 密码 在本例中 我使用电话号码身份验证来验证号码 因此在用户验证他的号码后 我将他的数据保存到 firebase DB 中 所以在那之后 我将下摆导航到登录屏幕 应该包含电子邮件 密码
  • 在ConfigureServices中注入依赖

    在我的 ASP Net Core 应用程序中 我需要在以下位置注入一些依赖项 在我的例子中是一个存储库 ConfigureServices method 问题是该方法不允许使用多个参数来注入依赖项 该怎么办呢 这是我的代码 public v
  • 在project.json .Net Core中本地管理nuget

    我不想依赖 nuget 服务来下载依赖项 我想在我的 Net Core 应用程序中本地下载并使用 nuget 包 是否可以 方法与之前相同 打开您的NuGet config https docs nuget org consume nuge
  • 我们是否需要在客户端/消费者处验证 JSON Web Token?

    我正在研究一些有关 JSON Web Token 的知识 我知道 header claims 由密钥签名 编码结果连接到 header claims signature 并最终发送回客户端 我有一些基本的疑问 我们是否需要在客户端 消费者处
  • Docker Hub API v2 令牌身份验证问题

    目前 我正在开发一个非常轻量级版本的 Docker 容器编排器 并且我必须能够从公共 Docker Hub 注册表获取图像摘要 我想使用 Docker Registry API v2 来实现此目的 我正在尝试使用以下 API 调用获取授权令
  • 同一服务器上的多个.NET版本

    所以我一直都知道在一台计算机 客户端或服务器 上运行多个版本的 NET 框架是可以的 这个问题 https stackoverflow com questions 407306 running many versions of net on
  • 忽略重复条目并在 EF Core 中的 DbContext.SaveChanges() 上提交成功条目

    我有一个 ASP Net Core 2 2 Web API 在我的一个控制器操作中 我向 MySQL 数据库表添加了一堆行 我使用的是 Pomelo 例如 dbContext AddRange entities dbContext Save
  • 如何使属性在 POST 请求上必需,但在 PUT 请求上不需要

    假设我有一个用户模型Email and Password用于身份验证目的的属性 如下所示 public class User public long Id get set Required public string FirstName g
  • PKCE 增强授权代码流中保护 code_verifier 的最佳实践

    由于 PKCE 现在是推荐的隐式流程授权方法 因此我正在寻找处理代码验证器的最佳实践以及如何完成此操作的建议 在高层 PKCE 授权流程中包括 产生code verifier在客户端 产生code challenge来自 1 hit aut
  • asp.net core / kestrel中的线程管理

    我正在解决我们已迁移到 asp net core 2 0 的 asp net 应用程序的性能 可扩展性问题 我们的应用程序作为应用程序服务托管在 azure 上 并且在任何中等流量的情况下都很容易崩溃 让我困惑的一件事是如何处理多个并发请求
  • 如何解决 Typescript 构建中的错误“找不到模块 'jquery'”

    我目前在 ts 文件的顶部有这个import require jquery 我这样做是因为我试图在我的打字稿文件中使用 jquery 但我似乎无法编译它 因为它返回标题中所述的错误 我正在使用 ASP NET CORE 脚本文件夹 tsco
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a

随机推荐