public IEnumerable <ExternalLoginViewModel> GetExternalLogins(string returnUrl, bool generateState = false)
        {
            IEnumerable <AuthenticationDescription> descriptions = Authentication.GetExternalAuthenticationTypes();
            List <ExternalLoginViewModel>           logins       = new List <ExternalLoginViewModel>();

            string state;

            if (generateState)
            {
                const int strengthInBits = 256;
                state = RandomOAuthStateGenerator.Generate(strengthInBits);
            }
            else
            {
                state = null;
            }

            foreach (AuthenticationDescription description in descriptions)
            {
                ExternalLoginViewModel login = new ExternalLoginViewModel
                {
                    Name = description.Caption,
                    Url  = Url.Route("ExternalLogin", new
                    {
                        provider      = description.AuthenticationType,
                        response_type = "token",
                        client_id     = Startup.PublicClientId,
                        redirect_uri  = new Uri(Request.RequestUri, returnUrl).AbsoluteUri,
                        state         = state
                    }),
                    State = state
                };
                logins.Add(login);
            }

            return(logins);
        }
Exemple #2
0
 /// <summary>
 /// 生成固定字节的随机数的十六进制字符串。
 /// </summary>
 /// <param name="size">字节数。</param>
 /// <returns>返回固定字节的随机数的十六进制字符串。</returns>
 public static string GeneralKey(int size)
 {
     return(RandomOAuthStateGenerator.Generate(size));
 }