CredentialVerifyEndpointResult BuildCredentialVerifyEndpointResult(UnityAuthenticationCredentialVerifyResult verifyResult)
 {
     return(new CredentialVerifyEndpointResult()
     {
         VerifyResult = verifyResult
     });
 }
        /// <summary>
        /// 验证登陆凭据
        /// </summary>
        /// <param name="principal">登陆凭据</param>
        /// <returns></returns>
        public static async Task <bool> VerifyCredentialAsync(ClaimsPrincipal principal, AuthenticationProperties properties)
        {
            IConfiguration configuration = HttpContextHelper.Current.RequestServices.GetService(typeof(IConfiguration)) as IConfiguration;

            if (configuration == null)
            {
                throw new Exception("get IConfiguration fail");
            }
            var unityClientOptions = HttpContextHelper.Current.RequestServices.GetService <IOptionsMonitor <UnityAuthenticationClientOption> >().Get(Constants.UnityAuthenticationScheme);

            if (unityClientOptions == null)
            {
                throw new Exception("get UnityAuthenticationClientOption fail");
            }
            var openIdOption = HttpContextHelper.Current.RequestServices.GetService <IOptionsMonitor <OpenIdConnectOptions> >().Get(OpenIdConnectDefaults.AuthenticationScheme);

            if (openIdOption == null)
            {
                throw new Exception("get OpenIdConnectOptions fail");
            }
            UnityAuthenticationCredentialVerifyRequest request = new UnityAuthenticationCredentialVerifyRequest()
            {
                Client = new IdentityServer4.Models.Client()
                {
                    ClientId      = openIdOption.ClientId,
                    ClientSecrets = new List <Secret>()
                    {
                        new Secret(openIdOption.ClientSecret.Sha256())
                    }
                },
                Claims = principal.Claims.ToDictionary(c => c.Type, c => c.Value)
            };
            string url = unityClientOptions.CredentialVerifyUrl;

            if (string.IsNullOrWhiteSpace(url))
            {
                url = openIdOption.Authority + "/" + Constants.RoutePaths.CredentialVerify;
            }
            try
            {
                var result = await HttpUtil.HttpPostJsonAsync(url, request).ConfigureAwait(false);

                var stringValue = await result.Content.ReadAsStringAsync().ConfigureAwait(false);

                UnityAuthenticationCredentialVerifyResult verifyResult = JsonSerialize.JsonToObject <UnityAuthenticationCredentialVerifyResult>(stringValue);
                var loginSuccess = verifyResult?.VerifySuccess ?? false;
                return(loginSuccess);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }