Tag: 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 […]

使用C#中的公钥validation使用RS256算法签名的JWT

好吧,我明白我问的问题可能很明显,但不幸的是我缺乏关于这个主题的知识,这个任务对我来说似乎很棘手。 我有一个OpenID Connect Provider返回的id令牌(JWT)。 这里是: eyJraWQiOiIxZTlnZGs3IiwiYWxnIjoiUlMyNTYifQ.ewogImlzcyI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZfV3pBMk1qIiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5NzAsCiAiY19oYXNoIjogIkxEa3RLZG9RYWszUGswY25YeENsdEEiCn0.XW6uhdrkBgcGx6zVIrCiROpWURs-4goO1sKA4m9jhJIImiGg5muPUcNegx6sSv43c5DSn37sxCRrDZZm4ZPBKKgtYASMcE20SDgvYJdJS0cyuFw7Ijp_7WnIjcrl6B5cmoM6ylCvsLMwkoQAxVublMwH10oAxjzD6NEFsu9nipkszWhsPePf_rM4eMpkmCbTzume-fzZIi5VjdWGGEmzTg32h3jiex-r5WTHbj-u5HL7u_KP3rmbdYNzlzd1xWRYTUs4E8nOTgzAUwvwXkIQhOh5TPcSMBYy6X3E7-_gr9Ue6n4ND7hTFhtjYs3cjNKIA08qm5cpVYFMFMG6PkhzLQ 它的头和有效负载解码如下: { “kid”:”1e9gdk7″, “alg”:”RS256″ }. { “iss”: “http://server.example.com”, “sub”: “248289761001”, “aud”: “s6BhdRkqt3”, “nonce”: “n-0S6_WzA2Mj”, “exp”: 1311281970, “iat”: 1311280970, “c_hash”: “LDktKdoQak3Pk0cnXxCltA” } 从IODC提供商的发现中,我得到了公钥(JWK): { “kty”:”RSA”, “kid”:”1e9gdk7″, “n”:”w7Zdfmece8iaB0kiTY8pCtiBtzbptJmP28nSWwtdjRu0f2GFpajvWE4VhfJAjEsOcwYzay7XGN0b-X84BfC8hmCTOj2b2eHT7NsZegFPKRUQzJ9wW8ipn_aDJWMGDuB1XyqT1E7DYqjUCEOD1b4FLpy_xPn6oV_TYOfQ9fZdbE5HGxJUzekuGcOKqOQ8M7wfYHhHHLxGpQVgL0apWuP2gDDOdTtpuld4D2LK1MZK99s9gaSjRHE8JDb1Z4IGhEcEyzkxswVdPndUWzfvWBBWXWxtSUvQGBRkuy1BHOa4sP6FKjWEeeF7gm7UMs2Nm2QUgNZw6xvEDGaLk4KASdIxRQ”, “e”:”AQAB” } 那么,问题是如何在C#中使用我所获得的RS256算法的公钥来validation这个JWT? 如果有一个很好的教程明确地描述这个过程,那将是很棒的。 但是,使用System.IdentityModel.Tokens.Jwt如何执行此操作的示例也可以正常工作。 更新:我明白,我需要做类似下面的代码,但我不知道在哪里获得用于计算SHA256哈希的“ 密钥 ”。 string tokenStr = “eyJraWQiOiIxZTlnZGs3IiwiYWxnIjoiUlMyNTYifQ.ewogImlzcyI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZfV3pBMk1qIiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5NzAsCiAiY19oYXNoIjogIkxEa3RLZG9RYWszUGswY25YeENsdEEiCn0.XW6uhdrkBgcGx6zVIrCiROpWURs-4goO1sKA4m9jhJIImiGg5muPUcNegx6sSv43c5DSn37sxCRrDZZm4ZPBKKgtYASMcE20SDgvYJdJS0cyuFw7Ijp_7WnIjcrl6B5cmoM6ylCvsLMwkoQAxVublMwH10oAxjzD6NEFsu9nipkszWhsPePf_rM4eMpkmCbTzume-fzZIi5VjdWGGEmzTg32h3jiex-r5WTHbj-u5HL7u_KP3rmbdYNzlzd1xWRYTUs4E8nOTgzAUwvwXkIQhOh5TPcSMBYy6X3E7-_gr9Ue6n4ND7hTFhtjYs3cjNKIA08qm5cpVYFMFMG6PkhzLQ”; string[] tokenParts = tokenStr.Split(‘.’); RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.ImportParameters( new […]

Google OAuth2服务帐户访问令牌请求提供“无效请求”响应

我正在尝试通过服务器到服务器方法与我的应用程序启用的BigQuery API进行通信。 我已经在这个谷歌指南上勾选了我在J#中尽我所能构建JWT的所有方框。 我对Base64Url编码了所有必要的东西。 但是,我从谷歌获得的唯一回应是400 Bad Request “error” : “invalid_request” 我从其他SO问题中确认了以下所有问题: 使用RSA和SHA256正确加密签名 我正在使用POST并使用application / x-www-form-urlencoded内容类型 转义索赔集中的所有反斜杠 在POST数据中尝试了各种grant_type和断言值 当我使用Fiddler时,我得到了相同的结果。 错误消息令人沮丧地缺乏细节! 我还能尝试什么?! 这是我的代码: class Program { static void Main(string[] args) { // certificate var certificate = new X509Certificate2(@”.p12″, “notasecret”); // header var header = new { typ = “JWT”, alg = “RS256” }; // claimset var times […]

如何使用rs256算法使用我自己的rsa私钥来签名字节?

我有自己的私钥字符串,即 —–BEGIN RSA PRIVATE KEY—– MIICXAIBAAKBgQCSAYYgzvGTww…. …. …. ….. 3yUMYj9oYzqdrRHP0XgD0cEEvyqPBwLaNsRdFwy5qTiHjj0f+ZWHQWmqcoLmmpzyZEbIvQm/VhbjRF6iKG4WZ9Hfa7ntYRNGdWgD/KMIeZI= —–END RSA PRIVATE KEY—– 现在,我需要在C#中使用此私钥签署我的声明集以生成JWT有效负载。 我写了以下代码: var utc0 = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); var issueTime = DateTime.Now; var iat = (int)issueTime.Subtract(utc0).TotalSeconds; var exp = (int)issueTime.AddMinutes(55).Subtract(utc0).TotalSeconds; var payload = new { iss = email, prn = prn, scope = “scope”, aud […]