小编wjm*_*m03的帖子

如何在API中正确验证OpenIddict JWT access_token?

我正在尝试实现一个基于 OpenIddict 的身份服务器。我们的用例是一个大型 JavaScript 应用程序,需要对多个后端 API 进行用户身份验证。JavaScript 应用程序使用密码流从专用 OpenIddict 服务器获取令牌。然后,前端调用的各种 API 会验证令牌。

我已经使用 ASP.NET Identity 和 EF 实现了服务器,并且可以成功检索有效令牌。我们的 API 在 AWS Lambda 中运行,因此我们不能(或不想)使用标准.AddDataProtection方法。我们使用存储在 S3 中的自签名证书来生成令牌并验证它们。

那么问题是,当我将 access_token 发送到后端 API 时,它们无法验证令牌并提供访问权限。我知道令牌是有效的,因为我可以使用JwtSecurityTokenHandler自签名证书在 Linqpad 中手动解密它们。

这是我的服务器配置:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();

            services.AddIdentity<ApplicationUser, IdentityRole>(options =>
            {
                options.ClaimsIdentity.UserNameClaimType = Claims.Name;
                options.ClaimsIdentity.UserIdClaimType = Claims.Subject;
                options.ClaimsIdentity.RoleClaimType = Claims.Role;
            })
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

            services.AddOpenIddict()
            .AddCore(options =>
            {
                options.UseEntityFrameworkCore().UseDbContext<ApplicationDbContext>();
            })
            .AddServer(options =>
            {
                options.SetTokenEndpointUris("/connect/token");
                options.AllowPasswordFlow();
                options.AcceptAnonymousClients();
                options.AddEncryptionCertificate(MyCustomCertificate);
                options.AddSigningCertificate(MyOtherCustomCertificate);
                options.UseAspNetCore().EnableTokenEndpointPassthrough();
            });

            services.AddDbContext<ApplicationDbContext>(options =>
            {
                options.UseSqlServer(connectionString);
                options.UseOpenIddict(); …
Run Code Online (Sandbox Code Playgroud)

jwt asp.net-core openiddict

5
推荐指数
1
解决办法
9235
查看次数

标签 统计

asp.net-core ×1

jwt ×1

openiddict ×1