首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在没有IdentityServer或OAuth的情况下配置JWT

如何在没有IdentityServer或OAuth的情况下配置JWT
EN

Stack Overflow用户
提问于 2019-04-15 03:53:39
回答 1查看 1.2K关注 0票数 2

我想构建一个JWT Security Token Service(.net核心2+),以便在不使用IdentityServer或OAuth的情况下为许多API(.net核心2+)提供身份验证和授权,因为我想要无重定向

"JWT Authenticator“运行良好,并且具有路由

  • POST帐户:注册新用户
  • POST身份验证/登录:如果凭据有效,则返回JWT令牌
  • POST令牌:刷新令牌
  • POST令牌/ revoke :撤销令牌

然而,我正在努力提供步骤4和5。我在API1 1/startup.cs -> ConfigureServices尝试了许多选项,当调用get API1 1/ConfigureServices时,除了404之外,没有得到任何结果。ConfigureServices方法仍然是这样的:

代码语言:javascript
复制
 public void ConfigureServices(IServiceCollection services)
    {
        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
        })
       .AddJwtBearer(options =>
       {
           options.Authority = "http://localhost:6000"; // JWT Authenticator address
           options.RequireHttpsMetadata = false;
           options.SaveToken = true;
           options.TokenValidationParameters = new TokenValidationParameters
           {    
               ValidIssuer = _configuration.GetValue<string>("JwtIssuer"),
               ValidAudience = _configuration.GetValue<string>("JwtAudience"),
               IssuerSigningKey = new SymmetricSecurityKey(
                   Encoding.UTF8.GetBytes(_configuration.GetValue<string>("JwtSecretKey"))),
               ClockSkew = TimeSpan.Zero
           };
       });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

是否可以使用类似AddJwtBearer的方法对步骤4和5进行配置?如果没有,我应该怎么做?使用API1的授权过滤器来拦截请求,并向JWT Authenticator发出请求以验证令牌/get声明/等?

EN

回答 1

Stack Overflow用户

发布于 2019-04-15 04:09:25

一些想法..。

您的4&5路径;通常您不会询问令牌的提供者它是否有效。您要做的是验证这一点,最有可能的是使用签名,这些参数可以-可选-从提供程序下载。

注意细微的区别:提供者本身并不检查它。

下一步:ClockSkew = TimeSpan.Zero,这是非常小的。我至少会放它一马。

至少,拥有404表示找不到资源。它不是401403。此建议授权成功,但找不到请求的资源。

签名验证的典型实现:

注意,这并不能解决你的404。

代码语言:javascript
复制
options.TokenValidationParameters = new TokenValidationParameters
{
    IssuerSigningKeyResolver = (s, securityToken, identifier, parameters) =>
    {
        // get from provider 
        // todo: cache this
        var json = new WebClient().DownloadString(
             issuer + "/.well-known/jwks.json"); //typical endpoint

        // serialize the result
        var keys = JsonConvert.DeserializeObject<JsonWebKeySet>(json).Keys;
        // cast the result to be the type expected by IssuerSigningKeyResolver
        return (IEnumerable<SecurityKey>) keys;
    }
//...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55679440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档