/// <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);
        }
Example #2
0
 /// <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());
     }
 }
Example #3
0
 /// <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);
 }