Exemple #1
0
        private void Initialize()
        {
            var webRequest = (HttpWebRequest)WebRequest.Create("https://" + Auth0Module.Auth0Domain + "/userinfo");

            webRequest.Headers.Add("Authorization", String.Format("Bearer {0}", access_token));
            var webResponse = (HttpWebResponse)webRequest.GetResponse();

            var serializer = new JavaScriptSerializer();

            using (var stream = webResponse.GetResponseStream())
            {
                using (var reader = new StreamReader(stream))
                {
                    claims = serializer.Deserialize <Dictionary <string, object> >(reader.ReadToEnd());

                    Auth0Trace.WriteLine("principal = {0} claims", claims.Count);
                }
            }

            // add exp
            var base64 = id_token.Split('.')[1];
            int mod4   = base64.Length % 4;

            if (mod4 > 0)
            {
                base64 += new string('=', 4 - mod4);
            }

            var jwt  = Encoding.UTF8.GetString(Convert.FromBase64String(base64));
            var json = serializer.Deserialize <Dictionary <string, object> >(jwt);

            claims["exp"] = json["exp"];
        }
        public void AuthenticateRequest(object sender, EventArgs e)
        {
            var application = (HttpApplication)sender;
            var request     = application.Request;
            var requestUrl  = new Uri(request.Url, request.RawUrl);
            var response    = application.Response;

            Auth0Trace.WriteLine("request = {0}", requestUrl);

            if (requestUrl.AbsolutePath.StartsWith(LogoutPath, StringComparison.OrdinalIgnoreCase))
            {
                if (requestUrl.AbsolutePath.Equals(LogoutPath, StringComparison.OrdinalIgnoreCase))
                {
                    RemoveSessionCookie(application);

                    response.Redirect(GetLogoutUrl(application), endResponse: true);
                }
                else
                {
                    response.Write("<a href=\"/\">login</a>");
                    application.CompleteRequest();
                }

                return;
            }

            string redirectUri;
            var    token = AuthenticateUser(application, out redirectUri);

            if (token == null)
            {
                redirectUri = redirectUri ?? GetLoginUrl(application);
            }

            if (!String.IsNullOrEmpty(redirectUri))
            {
                Auth0Trace.WriteLine("redirectUri = {0}", redirectUri);

                response.Redirect(redirectUri, endResponse: true);
                return;
            }

            var principal = token.GetPrincipal();

            HttpContext.Current.User = principal;
            Thread.CurrentPrincipal  = principal;
        }
        public static Auth0Token DecodeCookie(byte[] bytes)
        {
            try
            {
                for (int i = DefaultCookieTransforms.Length - 1; i >= 0; --i)
                {
                    bytes = DefaultCookieTransforms[i].Decode(bytes);
                }
                return(Auth0Token.FromBytes(bytes));
            }
            catch (Exception ex)
            {
                Auth0Trace.WriteLine("DecodeCookie failed with {0}", ex);

                // bad cookie
                return(null);
            }
        }
        public static Auth0Token AuthenticateUser(HttpApplication application, out string redirectUri)
        {
            redirectUri = null;

            var request    = application.Context.Request;
            var requestUrl = new Uri(request.Url, request.RawUrl);

            if (!requestUrl.AbsolutePath.Equals(LoginCallbackPath, StringComparison.OrdinalIgnoreCase))
            {
                return(ReadSessionCookie(application));
            }

            var query = HttpUtility.ParseQueryString(requestUrl.Query);
            var code  = query["code"];

            if (String.IsNullOrEmpty(code))
            {
                return(ReadSessionCookie(application));
            }

            var tokenRequestUri = String.Format("https://{0}/oauth/token", Auth0Domain);
            var client_id       = Auth0ClientId;
            var client_secret   = Auth0ClientSecret;
            var redirect_uri    = GetRedirectUrl(application);

            var payload = new StringBuilder("grant_type=authorization_code");

            payload.AppendFormat("&client_id={0}", WebUtility.UrlEncode(client_id));
            payload.AppendFormat("&client_secret={0}", WebUtility.UrlEncode(client_secret));
            payload.AppendFormat("&redirect_uri={0}", WebUtility.UrlEncode(redirect_uri));
            payload.AppendFormat("&code={0}", WebUtility.UrlEncode(code));

            var webRequest = (HttpWebRequest)WebRequest.Create(tokenRequestUri);

            webRequest.Method      = "POST";
            webRequest.ContentType = "application/x-www-form-urlencoded";
            using (var stream = webRequest.GetRequestStream())
            {
                var bytes = Encoding.UTF8.GetBytes(payload.ToString());
                stream.Write(bytes, 0, bytes.Length);
            }

            try
            {
                var webResponse = (HttpWebResponse)webRequest.GetResponse();
                using (var stream = webResponse.GetResponseStream())
                {
                    var token = Auth0Token.FromStream(stream);

                    WriteSessionCookie(application, token);

                    redirectUri = query["state"];

                    return(token);
                }
            }
            catch (WebException ex)
            {
                Auth0Trace.WriteLine("POST {0} failed with {1}", tokenRequestUri, ex);

                throw HandleOAuthError(ex, tokenRequestUri);
            }
        }