static async Task Main(string[] args) { IdentityModelEventSource.ShowPII = true; await Task.Delay(5000); var claims = new[] { new Claim(ClaimTypes.NameIdentifier, Guid.NewGuid().ToString()), new Claim(ClaimTypes.Name, "username") }; var identity = new ClaimsIdentity(claims, "Sample"); var handler = new Saml2SecurityTokenHandler(); var parameters = CreateRsaParameters(); using var rsa = new RSACryptoServiceProvider(); rsa.ImportParameters(parameters); var descriptor = new SecurityTokenDescriptor { Issuer = "urn:sample.identityprovider", Audience = "urn:sample.issuer", IssuedAt = DateTime.UtcNow, NotBefore = DateTime.UtcNow.AddMinutes(-5), Expires = DateTime.UtcNow.AddHours(2), Subject = identity, SigningCredentials = SignatureMethod.RsaSha256.CreateCredentials(new RsaSecurityKey(rsa)) }; var token = handler.CreateToken(descriptor); var binding = new WsTrustIssuedTokenBinding(); var endpoint = new EndpointAddress("https://localhost:5001/trust/13"); var factory = new WsTrustChannelFactory(binding, endpoint); factory.SecurityTokenHandlers.Add(handler); for (var i = 0; i < iterations; i++) { var channel = factory.CreateChannelWithIssuedToken(token); var request = new WsTrustRequest(WsTrustConstants.Trust13.WsTrustActions.Issue) { KeyType = WsTrustKeyTypes.Trust13.Bearer, AppliesTo = new AppliesTo(new EndpointReference("urn:sample:relyingparty")) }; var response = await channel.IssueAsync(request); var requestedToken = response.GetRequestedSecurityToken() as GenericXmlSecurityToken; var assertion = requestedToken.Element.OuterXml; Console.WriteLine(assertion); } Console.ReadKey(); }
private Binding CreateFederationBinding(SecurityTokenHandler handler, SoapChannelCreationContext context) { var binding = new WsTrustIssuedTokenBinding(); binding.KeyType = System.IdentityModel.Tokens.SecurityKeyType.BearerKey; binding.Security.Message.EstablishSecurityContext = false; //binding.Security.Message.IssuedTokenType = handler.GetTokenTypeIdentifiers().FirstOrDefault(); if (context.Properties.TryGetValue("securityAlgorithmSuite", out var value) && value is SecurityAlgorithmSuite securityAlgorithmSuite) { binding.Security.Message.AlgorithmSuite = securityAlgorithmSuite; } return(binding); }