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; } }