/// <summary> /// /// </summary> /// <param name="requestMessage"></param> /// <param name="config"></param> /// <param name="withRefreshToken"></param> /// <returns></returns> public static AccessTokenResponse ProcessAccessTokenRequest(AccessTokenRequest requestMessage, SecurityTokenServiceConfiguration config, Boolean withRefreshToken) { ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true; // Call issuer to create token WSTrustChannelFactory factory = new WSTrustChannelFactory("issuer"); // TODO: factory.Credentials.UserName.UserName = requestMessage.Name ?? requestMessage.ClientId; // TODO: factory.Credentials.UserName.Password = requestMessage.Password ?? requestMessage.ClientSecret; WSTrustChannel issuer = factory.CreateChannel() as WSTrustChannel; RequestSecurityToken rst = new RequestSecurityToken(WSTrust13Constants.RequestTypes.Issue); rst.AppliesTo = new EndpointAddress("https://wrap.client"); rst.KeyType = WSTrust13Constants.KeyTypes.Bearer; RequestSecurityTokenResponse response = null; issuer.Issue(rst, out response); WSTrustSerializationContext context = new WSTrustSerializationContext( config.SecurityTokenHandlerCollectionManager, config.CreateAggregateTokenResolver(), config.IssuerTokenResolver); // Create response var token = response.RequestedSecurityToken.SecurityToken; if (null == token) { using (XmlReader reader = new XmlNodeReader(response.RequestedSecurityToken.SecurityTokenXml)) { token = FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers.ReadToken(reader); } token = ConvertToSimpleWebToken(token, response); } // Write token return WriteToken(token, withRefreshToken); }
/// <summary> /// /// </summary> /// <param name="request"></param> /// <param name="message"></param> public static void WriteRequest(this HttpWebRequest request, AccessTokenRequest message) { request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; using (TextWriter writer = new StreamWriter(request.GetRequestStream())) { writer.Write(message.ToString()); } }
/// <summary> /// /// </summary> /// <param name="request"></param> /// <param name="message"></param> public static void WriteRequest(this WebRequest request, AccessTokenRequest message) { var httpRequest = request as HttpWebRequest; if (null == httpRequest) throw new NotSupportedException("Only HttpWebRequests are supported."); httpRequest.WriteRequest(message); }
/// <summary> /// /// </summary> /// <param name="requestMessage"></param> /// <param name="config"></param> /// <returns></returns> public static AccessTokenResponse ProcessAccessTokenRequest(AccessTokenRequest requestMessage, SecurityTokenServiceConfiguration config) { return ProcessAccessTokenRequest(requestMessage, config, false); }
/// <summary> /// Creates a message for requesting a security token with WS-Trust. /// </summary> /// <param name="requestMessage">A WRAP message for requesting access tokens.</param> /// <returns>A WS-Trust Request Security Token (RST) message.</returns> public RequestSecurityToken CreateRequest(AccessTokenRequest requestMessage) { return new RequestSecurityToken() { RequestType = RequestTypes.Issue, KeyType = KeyTypes.Bearer, ReplyTo = String.Empty, AppliesTo = new EndpointAddress("http://wrap.resource") // TODO }; }
/// <summary> /// Requests a token from the issuer and builds a response with that token. /// </summary> /// <param name="requestMessage"></param> /// <param name="principal"></param> /// <param name="sts"></param> /// <param name="withRefreshToken"></param> /// <returns></returns> public static AccessTokenResponse ProcessAccessTokenRequest(AccessTokenRequest requestMessage, IPrincipal principal, SecurityTokenService sts, Boolean withRefreshToken) { if (null == requestMessage) throw new ArgumentNullException("requestMessage"); if (null == principal) throw new ArgumentNullException("principal"); if (null == sts) throw new ArgumentNullException("sts"); // Call issuer to create token // TODO /*var context = new WSTrustSerializationContext( sts.SecurityTokenServiceConfiguration.SecurityTokenHandlerCollectionManager, sts.SecurityTokenServiceConfiguration.CreateAggregateTokenResolver(), sts.SecurityTokenServiceConfiguration.IssuerTokenResolver);*/ var response = sts.Issue( ClaimsPrincipal.CreateFromPrincipal(principal), new WrapSerializer().CreateRequest(requestMessage)); // Create response var token = response.RequestedSecurityToken.SecurityToken; return WriteToken(token, withRefreshToken); }
/// <summary> /// /// </summary> /// <param name="requestMessage"></param> /// <param name="principal"></param> /// <param name="sts"></param> /// <returns></returns> public static AccessTokenResponse ProcessAccessTokenRequest(AccessTokenRequest requestMessage, IPrincipal principal, SecurityTokenService sts) { return ProcessAccessTokenRequest(requestMessage, principal, sts, false); }