/// <summary> /// /// </summary> /// <param name="response"></param> /// <param name="message"></param> public static void WriteResponse(this HttpResponse response, AccessTokenResponse message) { response.ContentType = "application/x-www-form-urlencoded"; response.StatusCode = (Int32)message.StatusCode; if (401 == response.StatusCode) response.Headers["WWW-Authenticate"] = "WRAP"; response.Output.Write(message); response.Flush(); response.End(); }
/// <summary> /// /// </summary> /// <param name="names"></param> /// <returns></returns> public static AccessTokenResponse CreateAccessTokenResponse(this NameValueCollection names) { if (null == names) throw new ArgumentNullException("names"); AccessTokenResponse message = null; if (false == String.IsNullOrEmpty(names[WrapConstants.Parameters.CaptchaUrl])) message = new CaptchaResponse(); else if (false == String.IsNullOrEmpty(names[WrapConstants.Parameters.VerificationUrl])) message = new VerificationResponse(); else message = new AccessTokenResponse(); foreach (String key in names.Keys) { String value = names[key]; if (false == key.StartsWith("wrap_", StringComparison.OrdinalIgnoreCase) || String.IsNullOrEmpty(value)) continue; message.SetParameter(key, value); } message.Validate(); return message; }
private static AccessTokenResponse WriteToken(SecurityToken token, Boolean withRefreshToken) { var responseMessage = new AccessTokenResponse(); StringBuilder sb = new StringBuilder(); using (XmlWriter writer = XmlWriter.Create(sb, new XmlWriterSettings() { OmitXmlDeclaration = true })) { FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers.WriteToken(writer, token); } // Set response values responseMessage.SetParameter(WrapConstants.Parameters.AccessToken, sb.ToString()); if (withRefreshToken) // TODO: what is a good refresh token? responseMessage.SetParameter(WrapConstants.Parameters.RefreshToken, sb.ToString()); if (token.ValidTo < DateTime.MaxValue) responseMessage.SetParameter( WrapConstants.Parameters.AccessTokenExpiresIn, Convert.ToUInt64((token.ValidTo - DateTime.UtcNow).TotalSeconds).ToString(CultureInfo.InvariantCulture)); return responseMessage; }