Tag: jwt

HttpListener与JWT和Basic auth:如何发送WWW-Authenticate? (自托管)

我有一个在mono / .NET上运行跨平台的自托管REST应用程序。 一个问题是HttpListener管理和阻止WWW-Authenticate头的手动设置。 如果您将自己限制为内置的Basic,NTLM等身份validation,或者不需要身份validation,那么这很好,但如果您想接受任何其他类型的令牌,则会出现问题。 我正在使用带有REST样式接口的JWT令牌,使用Basic [1] auth进行初始身份validation。 在应用程序的另一部分,我正在做类似的事情,但使用自定义令牌和/或Basic auth作为API的另一部分的后备。 问题是: 如何让HttpListener发送“WWW-Authenticate:Basic”质询标题,同时还允许非基本授权令牌通过? 我已经尝试在听众中设置Basic和Anonymous: _listener.AuthenticationSchemes = AuthenticationSchemes.Basic | AuthenticationSchemes.Anonymous; 这导致在任何情况下都不返回WWW-Authenticate头。 我相信这应该允许基本或未经身份validation的连接,并且当我将状态代码设置为401(HttpStatusCode.Unauthorized)时,还应该设置WWW-Authenticate挑战。 但它没有(在mono或.NET上)。 如果我只设置AuthenticationSchemes.Basic,HttpListener会拒绝所有没有Basic样式标记的连接,这对于远程用途并不重要。 明显但蹩脚的解决方法: 目前我只是违反HTTP规范并返回401而没有WWW-Authenticate标头。 这有效,但会降低与第三方工具的兼容性。 我考虑使用完全不同的HttpListener实现,尽管大多数似乎是在原型阶段或自己的大型库的一部分。 我考虑过编写自己的HttpListener,但是在那时将整个应用程序移植到Java开始看起来很有吸引力。 我想找到比完整的平台端口或编写我自己的库更少工作的建议。 想法? [1] – 此处需要基本身份validation,以便与低级脚本和其他一些系统向后兼容。 请假设我了解安全隐患并使用SSL等。

System.IdentityModel.Tokens.JwtSecurityToken自定义属性

我的AuthServer当前正在使用以下代码生成JwtSecurityToken: var token = new JwtSecurityToken(_issuer, audienceId, data.Identity.Claims, issued.Value.UtcDateTime, expires.Value.UtcDateTime, signingKey); var handler = new JwtSecurityTokenHandler(); var jwt = handler.WriteToken(token); 有效载荷如下所示: { “unique_name”: “myUserName”, “sub”: “myUserName”, “role”: “API_User”, “iss”: “Automation”, “aud”: “099153c2625149bc8ecb3e85e03f0022”, “exp”: 1486056731, “nbf”: 1483464731 } 我想在令牌有效负载中添加一些自定义字段/属性,例如ProfilePicURL,以便有效负载看起来像这样: { “unique_name”: “myUserName”, “sub”: “myUserName”, “role”: “API_User”, “iss”: “Automation”, “aud”: “099153c2625149bc8ecb3e85e03f0022”, “exp”: 1486056731, “nbf”: 1483464731, “profilePicture”: “http://sofzh.miximages.com/c%23/user.jpg” […]

validationJWT令牌后访问dotnetcore中间件

我正在使用JWT承载认证,配置如下。 我的问题是在validation令牌之前中间件正在执行。 如何配置中间件以后运行? services.AddAuthentication() .AddCookie(_ => _.SlidingExpiration = true) .AddJwtBearer( _ => { _.Events = new JwtBearerEvents { // THIS CODE EXECUTES AFTER THE MIDDLEWARE???? OnTokenValidated = context => { context.Principal = new ClaimsPrincipal( new ClaimsIdentity(context.Principal.Claims, “local”)); return Task.CompletedTask; } }; _.RequireHttpsMetadata = false; _.SaveToken = false; _.TokenValidationParameters = new TokenValidationParameters() { ValidIssuer = this.Configuration[“Tokens:Issuer”], […]

即使安装和使用了System.IdentityModel.Tokens,也找不到JWTSecurityTokenHandler和SecurityTokenDescriptor

我正在尝试编写一个方法来生成.net C#中的JWT令牌。 通过互联网搜索,我发现页面展示了如何做到这一点。 我关注的一个这样的页面是https://gist.github.com/pmhsfelix/4151369 。 为了支持这一点,我在包管理器控制台中运行了“ Install-Package System.IdentityModel.Tokens.Jwt ”,可以看到“ “在我的paackages.config中。 但是,仍然找不到SecurityTokenDescriptor。 我有一种强烈的感觉,这是一些版本不匹配,但我无法找出它是什么。 有人可以帮我解决这个问题吗?

Firebase .NET令牌validation

处理使用Firebase进行某些数据存储的项目,我们的客户端请求使用C#.NET实现服务器。 我们在服务器上设置REST端点,以便客户端能够出于某些目的与其进行通信(例如,触发只能在服务器上运行的算法)。 Firebase建议我们通过ID令牌识别用户,如下所示: https : //firebase.google.com/docs/auth/server/verify-id-tokens#verify_id_tokens_using_a_third-party_jwt_library 由于没有支持令牌身份validation的官方.NET Firebase服务器SDK,我们已经使用第三方JWT库来执行此操作: https : //github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for -dotnet 根据Firebase文档中的规定,我们首先生成向服务器发送令牌。 在检查令牌中的几个不同字段后,我们使用kid字段从https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com获取公钥。 我们一直在浏览文档和StackOverflow很长一段时间,但是根据Firebase文档的规定,我们找不到使用此公钥来执行此操作的方法: 最后,确保ID令牌由与令牌的孩子声明相对应的私钥签名。 从https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com获取公钥,并使用JWT库validation签名。 Firebase文档实际上没有为此提供任何解释,我们正在使用的库的文档也没有。 因此,当我们给出的所有内容都是公钥时,我们甚至无法获得关于如何validation令牌是否由私钥签名的基本想法。 validation令牌是否由正确的私钥实际签名的最佳方法是什么?

在C#REST服务中validationADAL JWT令牌

我有一个Web应用程序,它使用ADAL库通过Azure Active Directory进行身份validation。 此Web应用程序通过将ADAL标记字符串作为参数传递来调用C#REST服务。 在我的REST服务中,我想validation此令牌。 如果令牌有效,则服务将执行操作。 我搜索了很多但是找不到在我的rest服务中validationJWT令牌的方法。 你能帮帮我吗?

在C#中正确使用JwtTokens

我正在玩JwtTokens并且无法使它们正常工作。 我正在使用http://www.nuget.org/packages/System.IdentityModel.Tokens.Jwt/ 。 我知道代码是一团糟,但只是为了表明我正在尝试做什么。 问题是我希望JwtTokenHandler因为生命周期而无法通过validation。 var key = “5A0AB091-3F84-4EC4-B227-0834FCD8B1B4”; var domain = “http://localhost”; var allowedAudience = “http://localhost”; var signatureAlgorithm = “http://www.w3.org/2001/04/xmldsig-more#hmac-sha256”; var digestAlgorithm = “http://www.w3.org/2001/04/xmlenc#sha256”; var issuer = “self”; var securityKey = System.Text.Encoding.Unicode.GetBytes(key); var inMemorySymmetricSecurityKey = new InMemorySymmetricSecurityKey(securityKey); var now = DateTime.UtcNow; var expiry = now.AddSeconds(1); var tokenHandler = new JwtSecurityTokenHandler(); var claimsList = new […]

无法设置OWIN + OneLogin + Bearer

我正在尝试使用授权令牌来保护我的WebAPI项目。 我不想使用cookie,我只想使用这样的Authorization标头: Authorization: Bearer xxx_access_or_id_token_xxx 。 我正在使用OneLogin OIDC作为外部提供商。 这是我的Startup.cs using Microsoft.Owin; using Microsoft.Owin.Security; using Microsoft.Owin.Security.DataHandler.Encoder; using Microsoft.Owin.Security.Jwt; using Owin; using System.Web.Http; public void Configuration(IAppBuilder app) { var issuer = “https://openid-connect.onelogin.com/oidc/”; var audience = ConfigurationManager.AppSettings[“OneLoginClientId”]; var secret = TextEncodings.Base64.Encode((TextEncodings.Base64Url.Decode(ConfigurationManager.AppSettings[“OneLoginClientSecret”]))); app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions { AuthenticationMode = AuthenticationMode.Active, AllowedAudiences = new[] { audience }, IssuerSecurityTokenProviders = new[] { new […]

如何让JWT在Autorest生成的SDK中工作? (ASP.NET Core 2.0)

我希望能够使用用户名和密码登录我的身份数据库并检索JWT。 然后我想使用JWT从我的API安全地访问数据。 我发现VS2017生成的SDK代码使用了旧版本的autorest,因此我已切换到使用Azure Autorest api和SDK都是ASP.NET Core 2.0 要生成我使用的SDK AutoRest -mynamespace mytrack.Client -CodeGenerator CSharp -Modeler Swagger -Input swagger.json -PackageName mytrack.client -AddCredentials true 版本显示为 AutoRest code generation utility [version: 2.0.4262; node: v8.11.2] 我把我的考试写成了 using System; using System.Threading.Tasks; using Microsoft.Rest; using Microsoft.VisualStudio.TestTools.UnitTesting; using Newtonsoft.Json.Linq; using swagger; // my name space from the autorest command, not to be confused […]

使用JwtAuthForWebAPI的Web APi2身份validation不接受JWT令牌

我遵循了教程,但它似乎与JWT无法正常工作,但基本身份validation还可以。 我下载并安装了JwtAuthForWebAPI。 我还生成了JWT令牌并尝试进行API调用,但错误是HTTP/1.1 401 Unauthorized 。 我是否必须实现/修改任何内容以将声明从JWT转移到Thread.CurrentPrincipal和HttpContext.CurrentPrincipal? 我的代码很简单:global.asax.cs: GlobalConfiguration.Configuration.MessageHandlers.Add( new JwtAuthenticationMessageHandler { AllowedAudience = reader.AllowedAudience, Issuer = reader.Issuer, SigningToken = builder.CreateFromKey(reader.SymmetricKey) }); Web.config文件: 调用示例 GET http://localhost:34669/api/v1/tasks/8 HTTP/1.1 Host: localhost:34669 Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJjb3JwIiwiYXVkIjoiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIsIm5iZiI6MTQwMDU1Mzc1NywiZXhwIjoxNzE2MTcyOTU3LCJ1bmlxdWVfbmFtZSI6ImJob2dnIiwiZ2l2ZW5fbmFtZSI6IkJvc3MiLCJmYW1pbHlfbmFtZSI6IkhvZ2ciLCJyb2xlIjpbIk1hbmFnZXIiLCJKdW5pb3JXb3JrZXIiXX0.Ls73kz80rCaCNqzc3K32BVO9_LnJDL8c1g5AXKIzn8w