{"id":1239,"date":"2019-04-10T15:24:00","date_gmt":"2019-04-10T14:24:00","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=1239"},"modified":"2022-07-25T08:33:26","modified_gmt":"2022-07-25T07:33:26","slug":"c-jwt-token","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/c-jwt-token\/","title":{"rendered":"C# JWT Token"},"content":{"rendered":"\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">        public void UseTokenAuthentication(IApplicationBuilder app)\n        {\n            app.Use(async (context, next) =>\n            {\n                var authHeader = context.Request.Headers[\"Authorization\"].ToString();\n                if (authHeader != null &amp;&amp; authHeader.StartsWith(\"bearer\", StringComparison.OrdinalIgnoreCase))\n                {\n                    var tokenStr = authHeader.Substring(\"Bearer \".Length).Trim();\n                    System.Console.WriteLine(tokenStr);\n                    var handler = new JwtSecurityTokenHandler();\n                    if (handler.ReadToken(tokenStr) is JwtSecurityToken token) { \n                        var nameid = token.Claims.First(claim => claim.Type == \"nameid\").Value;\n\n                        var identity = new ClaimsIdentity(token.Claims);\n                        context.User = new ClaimsPrincipal(identity);\n                    }\n                }\n                await next();\n            });\n        }\n\n        private string BuildToken(IUserSession userSession, LoginCredentials credentials)\n        {\n            var claims = new[] {\n                new Claim(JwtRegisteredClaimNames.Sub, credentials.Username),\n                new Claim(JwtRegisteredClaimNames.Sid, userSession.SessionId),\n                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())\n            };\n            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration[\"Jwt:Key\"]));\n            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);\n\n            var token = new JwtSecurityToken(_configuration[\"Jwt:Issuer\"],\n                _configuration[\"Jwt:Issuer\"],\n                claims,\n                expires: userSession.ExpiresAt.DateTime,\n                signingCredentials: creds);\n\n            return new JwtSecurityTokenHandler().WriteToken(token);\n        }\n<\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[6,4,1],"tags":[],"class_list":["post-1239","post","type-post","status-publish","format-standard","hentry","category-dotnet","category-programming","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/1239","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=1239"}],"version-history":[{"count":2,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/1239\/revisions"}],"predecessor-version":[{"id":3697,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/1239\/revisions\/3697"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=1239"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=1239"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=1239"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}