public async Task <ActionResult> Execute(AuthorizationParameter authorizationParameter, IPrincipal principal, Client client) { if (authorizationParameter == null) { throw new ArgumentNullException(nameof(authorizationParameter)); } if (client == null) { throw new ArgumentNullException(nameof(client)); } if (string.IsNullOrWhiteSpace(authorizationParameter.Nonce)) { throw new IdentityServerExceptionWithState( ErrorCodes.InvalidRequestCode, string.Format(ErrorDescriptions.MissingParameter, Constants.StandardAuthorizationRequestParameterNames.NonceName), authorizationParameter.State); } _simpleIdentityServerEventSource.StartImplicitFlow( authorizationParameter.ClientId, authorizationParameter.Scope, authorizationParameter.Claims == null ? string.Empty : authorizationParameter.Claims.ToString()); if (!_clientValidator.CheckGrantTypes(client, GrantType.@implicit)) { throw new IdentityServerExceptionWithState( ErrorCodes.InvalidRequestCode, string.Format(ErrorDescriptions.TheClientDoesntSupportTheGrantType, authorizationParameter.ClientId, "implicit"), authorizationParameter.State); } var result = await _processAuthorizationRequest.ProcessAsync(authorizationParameter, principal as ClaimsPrincipal, client); if (result.Type == TypeActionResult.RedirectToCallBackUrl) { var claimsPrincipal = principal as ClaimsPrincipal; await _generateAuthorizationResponse.ExecuteAsync(result, authorizationParameter, claimsPrincipal, client); } var actionTypeName = Enum.GetName(typeof(TypeActionResult), result.Type); _simpleIdentityServerEventSource.EndImplicitFlow( authorizationParameter.ClientId, actionTypeName, result.RedirectInstruction == null ? string.Empty : Enum.GetName(typeof(IdentityServerEndPoints), result.RedirectInstruction.Action)); return(result); }