标签: jwt

如何加密JWT安全令牌?

我需要通过签名和加密来保护我的网络令牌.我编写了下一行代码:

var tokenHandler = new JwtSecurityTokenHandler();
var tokenDescriptor = new SecurityTokenDescriptor
{
      Subject = new ClaimsIdentity(new[]
         {
             new Claim(ClaimTypes.Name, owner.Name),
             new Claim(ClaimTypes.Role, owner.RoleClaimType),
             new Claim("custom claim type", "custom content")
         }),
      TokenIssuerName = "self",
      AppliesToAddress = "http://www.example.com",
      Lifetime = new Lifetime(now, now.AddSeconds(60 * 3)),
      EncryptingCredentials = new X509EncryptingCredentials(new X509Certificate2(cert)),
      SigningCredentials = new X509SigningCredentials(cert1)
};
var token = (JwtSecurityToken)tokenHandler.CreateToken(tokenDescriptor);            
var tokenString = tokenHandler.WriteToken(token);
Run Code Online (Sandbox Code Playgroud)

所以,我正在使用一些生成的证书makecert.exe.然后我用另一个读取令牌字符串JwtSecurityTokenHandler:

var tokenHandlerDecr = new JwtSecurityTokenHandler();
var tok = tokenHandlerDecr.ReadToken(tokenString);
Run Code Online (Sandbox Code Playgroud)

并且令牌内容未加密(我可以tok在调试器下看到变量中的json ).我究竟做错了什么?如何加密令牌数据?

c# security wif jwt

21
推荐指数
3
解决办法
2万
查看次数

NSData不接受有效的base64编码字符串

我正在iOS(7)客户端实现JSON Web Token身份验证.它工作得很好.我的应用程序接收令牌,并可以使用它们对我的服务器进行经过身份验证的调用.

现在,我希望我的客户端代码检查令牌上的到期日期,以便它可以知道何时重新进行身份验证.检查JWT身份验证令牌的到期日期非常简单.授权令牌是3个base64编码的JSON blob,用'.'分隔.- 到期时间戳位于中间blob中,在一个名为的字段中ext.这是unix时代以来的几秒钟.

所以我的代码看起来像这样:

- (NSDate*) expirationDate
{
    if ( !_tokenAppearsValid ) return nil;

    if ( !_parsedExpirationDate )
    {
        //
        //  Token is three base64 encoded payloads separated by '.'
        //  The payload we want is the middle one, which is a JSON dict, with
        //  'exp' being the unix seconds timestamp of the expiration date
        //  Returning nil is appropriate if no 'exp' is findable
        //

        NSArray *components = [self.token componentsSeparatedByString:@"."];

        NSString *payload = …
Run Code Online (Sandbox Code Playgroud)

base64 json nsdata ios jwt

21
推荐指数
2
解决办法
1万
查看次数

可以将OAuth 2.0访问令牌作为JWT吗?

据我所知,OAuth 2.0规范access token应采取的形式方面非常模糊:

令牌可以表示用于检索授权信息的标识符,或者可以以可验证的方式自包含授权信息(即,由一些数据和签名组成的令牌串).可能需要额外的身份验证凭据(超出本规范的范围),以便客户端使用令牌.

访问令牌提供抽象层,用资源服务器理解的单个令牌替换不同的授权构造(例如,用户名和密码).这种抽象使得发布访问令牌比用于获取它们的授权授权更具限制性,并且消除了资源服务器理解各种身份验证方法的需要.

访问令牌可以具有基于资源服务器安全性要求的不同格式,结构和利用方法(例如,加密属性). 访问令牌属性和用于访问受保护资源的方法超出了本规范的范围,并由协议规范(如RFC6750)定义.

(重点补充)

链接的RFC6750没有提供更多的进一步特异性.有一个示例HTTP响应正文显示:

{
       "access_token":"mF_9.B5f-4.1JqM",
       "token_type":"Bearer",
       "expires_in":3600,
       "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA"
     }
Run Code Online (Sandbox Code Playgroud)

这似乎表明access_token可以是不透明的ASCII文本,例如编码的JSON Web令牌(JWT)

从我的角度来看,似乎JWT-as-access_token具有一些理想的属性:

  • 它是一个已知的规范,具有相当广泛的采用和许多语言的客户端库.

  • 它允许使用经过审查的加密库轻松签名和验证.

  • 因为它可以解码为JSON,所以它允许我们在令牌本身中包含有关令牌的元数据和信息.

我的问题是:首先,允许访问令牌是JWT吗?其次,如果根据规范是允许的,那么使用JWT作为访问令牌会有什么额外的考虑因素吗?

oauth access-token oauth-2.0 jwt

21
推荐指数
1
解决办法
1万
查看次数

express-jwt vs. jsonwebtoken

我有一种感觉,这将是一个快速的答案,但我似乎无法在网上找到任何明确的答案 - jsonwebtoken npm包和express-jwt npm包之间的区别是什么?我认为 express-jwt是在jsonwebtoken之上编写的,只是验证传入的令牌并设置req.user为JWT上的用户有效负载.

那是对的吗?很抱歉,如果这是一个总的noob问题...我刚刚开始学习身份验证和node/express,所以这对我来说都是新手.

authentication express jwt express-jwt

21
推荐指数
1
解决办法
4554
查看次数

如何在android中解码JWT令牌?

我有一个像这样的jwt令牌

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
Run Code Online (Sandbox Code Playgroud)

我如何解码这个,以便我可以像这样得到有效载荷

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}
Run Code Online (Sandbox Code Playgroud)

我使用过这个 库,却找不到办法做我想做的事

java android jwt

21
推荐指数
4
解决办法
3万
查看次数

了解JWT的RSA签名

我正在JWT(JsonWebToken)计划的帮助下实现登录系统.基本上在用户登录/登录后,服务器签署JWT并将其传递给客户端.

然后,客户端返回每个请求的令牌,服务器在发回响应之前验证令牌.

这几乎是你所期望的,但我对这个过程的逻辑有一些问题.从我读过的所有数学文章来看,似乎RSA签名使用非对称密钥进行签名.正如其名称所示,公钥暴露给客户端并且私钥保留在服务器上,使用发送到客户端的公钥对JWT进行签名并使用服务器端验证它是有意义的.私钥.

然而,在每个示例和库中,我看到它似乎是另一种方式,任何想法为什么它是这样的?如果JWT使用私钥签名并与公共密钥进行验证,那么这一点是什么?

rsa digital-signature jwt

21
推荐指数
3
解决办法
1万
查看次数

JOSE、JWA、JWE、JWK、JWS 和 JWT 有什么区别?

JOSE、JWA、JWE、JWK、JWS 和 JWT 之间有什么区别?它们之间有何关系?

jwt jwe jwk jose

21
推荐指数
1
解决办法
9472
查看次数

IDX10500:签名验证失败.无法解析SecurityKeyIdentifier

在尝试验证令牌时,我得到以下异常的原因是什么?

TokenValidationParameters validationParameters = new TokenValidationParameters();

validationParameters.ValidIssuers = new List<string>() { "http://www.company.com" };

validationParameters.IssuerSigningToken = new RsaSecurityToken(
  (System.Security.Cryptography.RSACryptoServiceProvider) Certificate.Get().PublicKey.Key);

SecurityToken securityToken = null;

var claimsPrincipal = 
    (FederatedAuthentication
      .FederationConfiguration
      .IdentityConfiguration
      .SecurityTokenHandlers
      .First() as JwtSecurityTokenHandler)
      .ValidateToken(tokenString, validationParameters, out securityToken);
Run Code Online (Sandbox Code Playgroud)

错误:

IDX10500: Signature validation failed. Unable to resolve SecurityKeyIdentifier: 
          'SecurityKeyIdentifier
    (
      IsReadOnly = False,
      Count = 2,
      Clause[0] = X509ThumbprintKeyIdentifierClause(
                    Hash = 0x6B7ACC520305BFDB4F7252DAEB2177CC091FAAE1),
    Clause[1] = System.IdentityModel.Tokens.NamedKeySecurityKeyIdentifierClause
    )
', 
token: '{"typ":"JWT","alg":"RS256","
Run Code Online (Sandbox Code Playgroud)

.net c# security wcf-security jwt

20
推荐指数
1
解决办法
6994
查看次数

Identity Server 4:向访问令牌添加声明

我正在使用Identity Server 4和Implicit Flow,并且想要向访问令牌添加一些声明,新的声明或属性是"tenantId"和"langId".

我已将langId添加为我的范围之一,如下所示,然后通过身份服务器请求,但我也获得了tenantId.怎么会发生这种情况?

这是范围列表和客户端配置:

  public IEnumerable<Scope> GetScopes()
    {
        return new List<Scope>
        {
             // standard OpenID Connect scopes
            StandardScopes.OpenId,
            StandardScopes.ProfileAlwaysInclude,
            StandardScopes.EmailAlwaysInclude,

            new Scope
            {
                Name="langId",
                 Description = "Language",
                Type= ScopeType.Resource,
                Claims = new List<ScopeClaim>()
                {
                    new ScopeClaim("langId", true)
                }
            },
            new Scope
            {
                Name = "resourceAPIs",
                Description = "Resource APIs",
                Type= ScopeType.Resource
            },
            new Scope
            {
                Name = "security_api",
                Description = "Security APIs",
                Type= ScopeType.Resource
            },
        };
    }
Run Code Online (Sandbox Code Playgroud)

客户:

  return new List<Client>
        {
            new Client
            {
                ClientName = "angular2client", …
Run Code Online (Sandbox Code Playgroud)

c# jwt thinktecture-ident-server openid-connect identityserver4

20
推荐指数
3
解决办法
3万
查看次数

JWT中的"秘密"应该是什么?

我将把JWT应用到我使用Java-Jersey开发的REST API中.我正在为JWT使用这个库 - https://github.com/auth0/java-jwt

关于JWT - Secret,我几乎没有问题

  1. Secret必须是独一无二的吗?
  2. 我应该使用用户密码的哈希版本来保密吗?(然后它不是唯一的)这是因为当用户更改他的密码时,他的令牌将自动无效.

java rest secret-key jwt

20
推荐指数
3
解决办法
2万
查看次数