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); }
/// <summary> /// 生成固定字节的随机数的十六进制字符串。 /// </summary> /// <param name="size">字节数。</param> /// <returns>返回固定字节的随机数的十六进制字符串。</returns> public static string GeneralKey(int size) { return(RandomOAuthStateGenerator.Generate(size)); }