Tag: jwt

如何从经过身份validation的SecurityToken中获取声明

我将一个标记作为字符串传递给SOAP服务,并validation该标记是有效的。 我现在有一个SecurityToken,在调试模式下我可以看到所有声明,特别是userId声明我想要传递给另一个方法。 我似乎无法弄清楚如何获得索赔。 现在我解码了令牌的字符串版本(令牌的无validation字符串版本,我至少等到成功validation后。)这是代码块: SecurityToken validatedToken = null; if (VerifyToken(sPassword, ref response, ref validatedToken)) { var claimsObj = JObject.Parse(Encoding.UTF8.GetString(Base64Url.Decode(claims))); JToken userId = claimsObj.GetValue(“userId”); return implClass.Process(userId); } 如何从SecurityToken中获取声明? validatedToken.Id; // not it validatedToken.ToClaimsPrincipal(cert); // doesn’t work 对于暴露的属性,我没有其他任何东西看起来很有希望,但是因为我可以在调试器中看到声明,我确信有一种方法我只是没有看到。

对于未经身份validation的重定向到URL而不是401

我正在使用ASP.Net 5 MVC 6和JWT令牌,这些令牌是在用户位于该站点是其子域的另一个站点时创建的。 我的目标是将令牌和请求一起传递给此子域。 如果用户碰巧尝试在没有标题中的正确令牌的情况下来到此子域名url,那么我想将它们重定向到主站点登录页面。 在对最新的RC-1版本感到非常沮丧之后,使用带有SecureKey而不是证书的JWT令牌。 我终于通过使用RC-2夜间构建版本来使用我的代码。 现在我的问题是,我希望能够在未经身份validation的用户的情况下重定向到外部URL。 以下是我的身份validation代码示例: var key = “mysupersecretkey=”; var encodedkey2 = Convert.FromBase64String(key); app.UseJwtBearerAuthentication(options => { options.AutomaticAuthenticate = true; options.AutomaticChallenge = true; options.TokenValidationParameters.IssuerSigningKey = new SymmetricSecurityKey(encodedkey2); options.TokenValidationParameters.ValidIssuer = “https://tv.alsdkfalsdkf.com/xxx/yyy”; options.TokenValidationParameters.ValidateIssuer = true; options.TokenValidationParameters.ValidAudience = “https://www.sdgfllfsdkgh.com/”; options.TokenValidationParameters.ValidateAudience = true; options.Configuration = new Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfiguration() { Issuer = “https://tv.sdfkaysdf.com/xxx/yyy” }; }); 现在我看到其他使用OpedId的例子,他们很容易,有一个名为RedirectUrl的参数 app.UseOpenIdConnectAuthentication(options […]

MVC与Owin JWT身份

我试图找出如何从我的令牌中获得索赔。 我会尽量保持解释简短 我有一个HTML页面,它发布到我的web api的post,并进行auth检查并返回一个JWT令牌 当我得到令牌后,我想将它发送到不同的url,我这样做的方式是使用查询字符串。 我知道我可以使用cookies但是对于这个应用我们不想使用它们。 所以,如果我的url看起来像这样http://somedomain/checkout/?token=bearer token comes here 我正在使用Owin middleware ,这是我到目前为止所拥有的 app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions { Provider = new ApplicationOAuthBearerAuthenticationProvider(), }); public class ApplicationOAuthBearerAuthenticationProvider : OAuthBearerAuthenticationProvider { public override Task RequestToken(OAuthRequestTokenContext context) { if (context == null) throw new ArgumentNullException(“context”); var token = HttpContext.Current.Request.QueryString[“token”]; if (!string.IsNullOrEmpty(token)) context.Token = token; return Task.FromResult(null); } } 但是我如何从Token获取Claims或只是检查IsAuthenticated 我在我的controller内部尝试了以下检查,但IsAuthenticated总是false […]

无法使用.netvalidationJSON Web令牌 – 密钥短

我使用JSONWebToken npm模块生成一个jot: var jwt = require(‘jsonwebtoken’); var payload = { “iss”: “https://secure.example.com/”, “exp”: 1410819380, “http://example.com/orgnum”: “987987987”, “http://example.com/user”: “me@example.com” }; var token = jwt.sign(payload, ‘secret’); console.log(token); 这给了我以下输出: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3NlY3VyZS5leGFtcGxlLmNvbS8iLCJleHAiOjE0MTA4MTkzODAsImh0dHA6Ly9leGFtcGxlLmNvbS9vcmdudW0iOiI5ODc5ODc5ODciLCJodHRwOi8vZXhhbXBsZS5jb20vdXNlciI6Im1lQGV4YW1wbGUuY29tIiwiaWF0IjoxNDA4Mzk0Mjk2fQ.5X5LTg4wxDF2p49xtsRcG4S9Yk4qSfW1tMEU0AquBhc 由于我没有指定我想要的算法,因此它使用SHA256。 现在,我尝试在c#中validation这一点。 这简直不容易…… 我得到一个关于密钥大小的例外: IDX10603:’System.IdentityModel.Tokens.InMemorySymmetricSecurityKey’不能小于:’128’位。 Parameternavn:key.KeySize实际大小为48。 我尝试扩展密钥,在创建对称密钥时出现新错误: Base-64 char数组或字符串的长度无效 我认为这与我告诉.net代码关于我的密钥的方式有关。 由于SymmetricKeyIssuerSecurityTokenProvider构造函数参数名为base64Key ,因此我尝试对我的密钥进行Base64Url编码: var secret = Base64UrlEncoder.Encode(“secret”); TokenValidationParameters validationParameters = new TokenValidationParameters { ValidateIssuer = false, ValidateAudience = false, […]

如何在使用IdentityServer进行身份validation后获取WebAPI控制器上的用户信息?

在我的客户端应用程序成功validationIdentityServer3后,我无法在WebAPI控制器上获取用户信息。 以下是步骤: 从JavaScript Implicit Client应用程序成功登录“使用配置文件和访问令牌” 我在“ID令牌内容”面板上看到用户的数据 我对我的WebAPI服务进行“呼叫服务”,我在ClaimsPrincipal中看到了许多声明,但无法获取客户端显示的电子邮件,角色等值。 以下是代码和回复。 任何人都可以帮我提供一些如何在WebAPI上获取用户数据的帮助吗?

如何在ASP.NET WebApi的每个请求上对JWT令牌应用自定义validation?

在使用承载令牌validationWeb api呼叫时,是否可以为每个请求添加自定义validation? 我正在使用以下配置,应用程序已经正确validation了JWT令牌。 app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions { AuthenticationType = “jwt”, TokenEndpointPath = new PathString(“/api/token”), AccessTokenFormat = new CustomJwtFormat(), Provider = new CustomOAuthProvider(), }); app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions { AllowedAudiences = new[] { “all” }, IssuerSecurityTokenProviders = new[] { new SymmetricKeyIssuerSecurityTokenProvider(Config.JWT_Issuer, Config.JWT_Key) },, }); 现在,由于令牌设置为永不过期,我想为使用不记名令牌的每个请求添加一个额外的自定义validation步骤,因此我可以根据请求validation一些其他信息,并在需要时拒绝访问。 在每个请求中添加此validation的正确位置在哪里?

OAuth承载令牌身份validation未通过签名validation

我在令牌使用者身上收到以下错误。 任何解决这个问题的帮助都将非常受欢迎。 谢谢。 “IDX10503:签名validation失败。 密钥尝试:’System.IdentityModel.Tokens.SymmetricSecurityKey’。 捕获到exception:’System.InvalidOperationException:IDX10636:SignatureProviderFactory.CreateForVerifying为key返回null:’System.IdentityModel.Tokens.SymmetricSecurityKey’,signatureAlgorithm:’ http : //www.w3.org/2001/04/xmldsig-more#hmac -sha256 ‘。 在System.IdentityModel.Tokens.JwtSecurityTokenHandler.ValidateSignature(Byte [] encodedBytes,Byte []签名,SecurityKey密钥,字符串算法)的Microsoft.IdentityModel.Logging.LogHelper.Throw(String message,Type exceptionType,EventLevel logLevel,Exception innerException)在System.IdentityModel.Tokens.JwtSecurityTokenHandler.ValidateSignature(String token,TokenValidationParameters validationParameters)’。 令牌:’令牌信息在这里’“ OAuth服务器上的令牌生成代码 using (var ctlr = new EntityController()) { var authRepo = ctlr.GetAuthModelRepository(); string clientId; ticket.Properties.Dictionary.TryGetValue(WebConstants.OwinContextProps.OAuthClientIdPropertyKey, out clientId); if (string.IsNullOrWhiteSpace(clientId)) { throw new InvalidOperationException(“AuthenticationTicket.Properties does not include audience”); } //audience record var client = […]

如何使用带有RSA私钥的RS256在C#中创建加密的JWT

我正在使用jose-jwt库,并希望使用RS256算法在C#中创建加密的JWT进行加密。 我没有密码学的经验,所以请原谅我的无知。 我在文档中看到以下示例: var payload = new Dictionary() { { “sub”, “mr.x@contoso.com” }, { “exp”, 1300819380 } }; var privateKey=new X509Certificate2(“my-key.p12”, “password”, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet).PrivateKey as RSACryptoServiceProvider; string token=Jose.JWT.Encode(payload, privateKey, JwsAlgorithm.RS256); 它显示了使用p12文件,但是如何使用下面表格的RSA密钥文件? 我正在查看X509Certificate2的文档,但我看不到RSA私钥的选项。 它似乎只接受PKCS7 ,我理解为公钥。 —–BEGIN RSA PRIVATE KEY—– MIICXAIBAAKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUp wmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5 1s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQABAoGAFijko56+qGyN8M0RVyaRAXz++xTqHBLh 3tx4VgMtrQ+WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2 pIIVOFMDG+KESnAFV7l2c+cnzRMW0+b6f8mR1CJzZuxVLL6Q02fvLi55/mbSYxECQQDeAw6fiIQX GukBI4eMZZt4nscy2o12KyYner3VpoeE+Np2q+Z3pvAMd/aNzQ/W9WaI+NRfcxUJrmfPwIGm63il AkEAxCL5HQb2bQr4ByorcMWm/hEP2MZzROV73yF41hPsRC9m66KrheO9HPTJuo3/9s5p+sqGxOlF L0NDt4SkosjgGwJAFklyR1uZ/wPJjj611cdBcztlPdqoxssQGnh85BzCj/u3WqBpE2vjvyyvyI5k X6zk7S0ljKtt2jny2+00VsBerQJBAJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2epl U9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhMCQBGoiuSoSjafUhV7i1cEGpb88h5NBYZzWXGZ 37sJ5QsW+sJyoNde3xH8vdXhzU7eT82D6X/scw9RZz+/6rCJ4p0= —–END RSA PRIVATE KEY—– 最后, […]

无法使用Google Calendar API加载System.Threading.Tasks程序集

解决了 ! 非常感谢Sam Leach 以下是我工作的app.config文件的示例: … 我也发现了这个来源 编辑:原始问题在线下。 我正在使用.NET 4.0 Framework,从我的研究中我知道不再需要System.Threading.Tasks程序集(因为它是自动包含的)。 我错了吗? 如果我是对的,我现在非常确定会引发错误,因为google-api-dotnet-client开发人员使用的System.Threading.Tasks版本与Visual Studio 2010使用的版本不同。 当我删除一些行时,我注意到在检查应用程序的行为时。 这些线出来了: gcal = new CalendarService(new BaseClientService.Initializer() { Authenticator = auth, ApplicationName = APP_NAME, }); 所以,我的新问题是: 有没有办法强制在VS2010中使用一个特定版本的参考组件? 感谢您帮助我,我相信它会对很多人有所帮助,因为google-calendar-api-v3的记录很糟糕。 亲切的问候,布鲁诺。 我的问题是我无法通过VisualStudio访问Google API作为服务。 我收到此错误: L’exception System.IO.FileLoadException n’a pas été gérée Message=Impossible de charger le fichier ou l’assembly ‘System.Threading.Tasks, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a’ ou […]

尝试使用.NET JWT库生成令牌时出错

我正在尝试使用包System.IdentityModel.Tokens.Jwt来生成令牌。 我在网上找到了一些代码示例,非常简单,但后来我遇到了一个我无法弄清楚的错误。 这是我正在使用的代码(为简洁起见略有修改): public class TestClass { public static string GetJwtToken() { var tokenHandler = new JwtSecurityTokenHandler(); var input = “anyoldrandomtext”; var securityKey = new byte[input.Length * sizeof(char)]; Buffer.BlockCopy(input.ToCharArray(), 0, securityKey, 0, securityKey.Length); var now = DateTime.UtcNow; var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new[] { new Claim( ClaimTypes.UserData, “IsValid”, ClaimValueTypes.String, “(local)” ) […]