示例#1
0
        private Uri GetServiceLoginUrl(Uri returnUrl)
        {
            UriBuilder builder = new UriBuilder(this.AuthorizationEndpoint);

            StringBuilder queryStringBuilder = new StringBuilder();

            UriUtilities.AppendQueryStringArgument(queryStringBuilder, "client_id", this.AppID);
            var state = System.Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(returnUrl.Query));

            UriUtilities.AppendQueryStringArgument(queryStringBuilder, "state", state);
            UriUtilities.AppendQueryStringArgument(queryStringBuilder, "scope", "profile");
            UriUtilities.AppendQueryStringArgument(queryStringBuilder, "response_type", "code");

            UriUtilities.AppendQueryStringArgument(queryStringBuilder, "redirect_uri", returnUrl.GetLeftPart(UriPartial.Path));

            builder.Query = queryStringBuilder.ToString();
            return(builder.Uri);
        }
示例#2
0
        public AuthenticationResult VerifyAuthentication(HttpContextBase context)
        {
            try
            {
                var code = context.Request.QueryString["code"];

                var accessToken = this.QueryAccessToken(UriUtilities.ConvertToAbsoluteUri(context.Request.RawUrl, context), code);

                var result = this.GetCustomerProfile(accessToken);

                AuthenticationResult authenticationResult = new AuthenticationResult(true, this.ProviderName, result["user_id"], result["name"], result);
                return(authenticationResult);
            }
            catch (Exception ex)
            {
                AuthenticationResult authenticationResult = new AuthenticationResult(ex);
                return(authenticationResult);
            }
        }
        private Dictionary <string, string> GetCustomerProfile(string accessToken)
        {
            UriBuilder    builder            = new UriBuilder(this.ProfileEndpoint);
            StringBuilder queryStringBuilder = new StringBuilder();

            UriUtilities.AppendQueryStringArgument(queryStringBuilder, "access_token", accessToken);

            builder.Query = queryStringBuilder.ToString();

            Dictionary <string, string> result = new Dictionary <string, string>();

            using (WebClient webClient = new WebClient())
            {
                string response = webClient.DownloadString(builder.Uri);

                JavaScriptSerializer serializer = new JavaScriptSerializer();
                result = serializer.Deserialize <Dictionary <string, string> >(response);
            }

            return(result);
        }