public async Task <ActionResult> OpenId(string code) { if (string.IsNullOrWhiteSpace(code)) { throw new ArgumentNullException(nameof(code)); } var authenticatedUser = await SetUser().ConfigureAwait(false); var request = _dataProtector.Unprotect <AuthorizationRequest>(code); var issuerName = Request.GetAbsoluteUriWithVirtualPath(); var actionResult = await _openidAuthenticateResourceOwnerAction.Execute(request.ToParameter(), authenticatedUser, code, issuerName).ConfigureAwait(false); var result = this.CreateRedirectionFromActionResult(actionResult, request); if (result != null) { LogAuthenticateUser(actionResult, request.ProcessId); return(result); } await TranslateView(request.UiLocales).ConfigureAwait(false); var viewModel = new AuthorizeOpenIdViewModel { Code = code }; await SetIdProviders(viewModel).ConfigureAwait(false); return(View(viewModel)); }
public async Task <ActionResult> OpenId(string code) { if (string.IsNullOrWhiteSpace(code)) { throw new ArgumentNullException(nameof(code)); } var authenticatedUser = await SetUser(); var request = _dataProtector.Unprotect <AuthorizationRequest>(code); var actionResult = await _authenticateActions.AuthenticateResourceOwnerOpenId( request.ToParameter(), authenticatedUser, code); var result = this.CreateRedirectionFromActionResult(actionResult, request); if (result != null) { LogAuthenticateUser(actionResult, request.ProcessId); return(result); } await TranslateView(request.UiLocales); var viewModel = new AuthorizeOpenIdViewModel { Code = code }; await SetIdProviders(viewModel); return(View(viewModel)); }
public static LocalAuthenticationParameter ToParameter(this AuthorizeOpenIdViewModel viewModel) { if (viewModel == null) { throw new ArgumentNullException(nameof(viewModel)); } return(new LocalAuthenticationParameter { UserName = viewModel.UserName, Password = viewModel.Password }); }
protected async Task SetIdProviders(AuthorizeOpenIdViewModel authorizeViewModel) { var schemes = (await _authenticationSchemeProvider.GetAllSchemesAsync().ConfigureAwait(false)).Where(p => !string.IsNullOrWhiteSpace(p.DisplayName)); var idProviders = new List <IdProviderViewModel>(); foreach (var scheme in schemes) { idProviders.Add(new IdProviderViewModel { AuthenticationScheme = scheme.Name, DisplayName = scheme.DisplayName }); } authorizeViewModel.IdProviders = idProviders; }
public async Task <ActionResult> LocalLoginOpenId(AuthorizeOpenIdViewModel authorizeOpenId) { if (authorizeOpenId == null) { throw new ArgumentNullException(nameof(authorizeOpenId)); } if (string.IsNullOrWhiteSpace(authorizeOpenId.Code)) { throw new ArgumentNullException(nameof(authorizeOpenId.Code)); } await SetUser(); var uiLocales = DefaultLanguage; try { // 1. Decrypt the request var request = _dataProtector.Unprotect <AuthorizationRequest>(authorizeOpenId.Code); // 2. Retrieve the default language uiLocales = string.IsNullOrWhiteSpace(request.UiLocales) ? DefaultLanguage : request.UiLocales; // 3. Check the state of the view model if (!ModelState.IsValid) { await TranslateView(uiLocales); await SetIdProviders(authorizeOpenId); return(View("OpenId", authorizeOpenId)); } // 4. Local authentication var actionResult = await _authenticateActions.LocalOpenIdUserAuthentication(authorizeOpenId.ToParameter(), request.ToParameter(), authorizeOpenId.Code); var subject = actionResult.Claims.First(c => c.Type == SimpleIdentityServer.Core.Jwt.Constants.StandardResourceOwnerClaimNames.Subject).Value; // 5. Authenticate the user by adding a cookie await SetLocalCookie(actionResult.Claims, request.SessionId); _simpleIdentityServerEventSource.AuthenticateResourceOwner(subject); // 6. Redirect the user agent var result = this.CreateRedirectionFromActionResult(actionResult.ActionResult, request); if (result != null) { LogAuthenticateUser(actionResult.ActionResult, request.ProcessId); return(result); } } catch (Exception ex) { _simpleIdentityServerEventSource.Failure(ex.Message); ModelState.AddModelError("invalid_credentials", ex.Message); } await TranslateView(uiLocales); await SetIdProviders(authorizeOpenId); return(View("OpenId", authorizeOpenId)); }