public async Task <ConsentViewModel> BuildConsentViewModel(string returnUrl, InputConstentViewModel model = null) { var request = await _identityServerInteractionService.GetAuthorizationContextAsync(returnUrl); if (request == null) { return(null); } var client = await _icelientStore.FindEnabledClientByIdAsync(request.ClientId); var resources = await _resourceStore.FindEnabledResourcesByScopeAsync(request.ScopesRequested); var vm = CreateViewModel(request, client, resources, model); vm.ReturnUrl = returnUrl; return(vm); }
public async Task <IActionResult> Index(InputConstentViewModel viewModel) { var result = await _service.ProcessConsent(viewModel); if (result.IsRedirect) { return(Redirect(result.RedirectUrl)); } else { if (!string.IsNullOrEmpty(result.ValidationError)) { ModelState.AddModelError("", result.ValidationError); } return(View(result.ConsentViewModel)); } }
public async Task <ProcessConsentResult> ProcessConsent(InputConstentViewModel viewModel) { ConsentResponse consentResponse = null; var result = new ProcessConsentResult(); if (viewModel.Button == "no") { consentResponse = ConsentResponse.Denied; } else if (viewModel.Button == "yes") { if (viewModel.ScopesConsented != null && viewModel.ScopesConsented.Any()) { consentResponse = new ConsentResponse { ScopesConsented = viewModel.ScopesConsented, RememberConsent = viewModel.RememberConsent }; } result.ValidationError = "请至少选择一个权限"; } if (consentResponse != null) { var request = await _identityServerInteractionService.GetAuthorizationContextAsync(viewModel.ReturnUrl); await _identityServerInteractionService.GrantConsentAsync(request, consentResponse); result.RedirectUrl = viewModel.ReturnUrl; } else { var consentModel = await BuildConsentViewModel(viewModel.ReturnUrl); result.ConsentViewModel = consentModel; } return(result); }
private ConsentViewModel CreateViewModel(AuthorizationRequest request, Client client, Resources resource, InputConstentViewModel model) { var selectedScopes = model?.ScopesConsented ?? Enumerable.Empty <string>(); var vm = new ConsentViewModel(); vm.ClientLogoUrl = client.LogoUri; vm.ClientName = client.ClientName; vm.ClientUrl = client.ClientUri; vm.RemeberConsent = model?.RememberConsent ?? true; vm.IdentityScopes = resource.IdentityResources.Select(i => CreateScopeViewModel(i, selectedScopes.Contains(i.Name) || model == null)); vm.ResourceScopes = resource.ApiResources.SelectMany(r => r.Scopes).Select(x => CreateScopeViewModel(x, selectedScopes.Contains(x.Name) || model == null)); return(vm); }