public async Task <IActionResult> Authorize() { var code = HttpUtility.ParseQueryString(_request.QueryString.Value).Get("code"); var tokenModel = await _tokenService.GetIdGovUaToken(code); if (tokenModel == null) { return(RedirectToAction("Denied", new { text = "Сервіс \"Інтегрована система електронної ідентифікації\" https://id.gov.ua/ не відповідає. Доступ на веб - портал СГД Держлікслужби не може бути наданий. Будь - ласка спробуйте пізніше." })); } var userInfo = await _tokenService.GetIdGovUaUserInfo(tokenModel); if (userInfo == null) { return(RedirectToAction("Denied", new { text = "Сервіс \"Інтегрована система електронної ідентифікації\" https://id.gov.ua/ не підтвердив Вашу особу. Доступ на веб - портал СГД Держлікслужби не надано." })); } if (!string.IsNullOrEmpty(userInfo.edrpoucode)) { if (userInfo.edrpoucode.All(char.IsDigit)) { if (userInfo.edrpoucode.Length != 8) { userInfo.drfocode = userInfo.edrpoucode; userInfo.edrpoucode = string.Empty; } } else { userInfo.drfocode = userInfo.edrpoucode; userInfo.edrpoucode = string.Empty; } } if (string.IsNullOrEmpty(userInfo.drfocode)) { return(RedirectToAction("Denied", new { text = "Згідно інформації, що надійшла від \"Інтегрованой системи електронної ідентифікації\" https://id.gov.ua/ у Вашій ЕЦП не заповнене поле \"Код РНОКПП (Індивідуальний податковий номер) користувача\"." + "В зв'язку з цим, ми не можемо ідентифікувати Вашу особу." })); } if (userInfo.edrpoucode == userInfo.drfocode) { userInfo.edrpoucode = ""; } if (userInfo.auth_type != "dig_sign") { return(RedirectToAction("Denied", new { text = "Сервіс \"Інтегрована система електронної ідентифікації\" https://id.gov.ua/ надав інформацію що Ви ідентифікувалися за допомогою MobileID / BankID. " + "Звертаємо Вашу увагу, що доступ до порталу надається тільки для Користувачів з ЕЦП, зареєстрованих на організацію чи ФОП. " + "Доступ на веб - портал СГД Держлікслужби не надано." })); } (string organizationId, Guid employeeId, Guid profileId, Guid personId)res; string register; try { res = await _tokenService.CheckOrgEmployeeUnit(userInfo); register = "1"; } catch (Exception) { register = "0"; res = ("", Guid.Empty, Guid.Empty, Guid.Empty); } var claims = new List <Claim> { new Claim("fullName", userInfo.subjectcn, ClaimValueTypes.String), new Claim("lastname", userInfo.lastname, ClaimValueTypes.String), new Claim("drfocode", userInfo.drfocode, ClaimValueTypes.String), new Claim("register", register, ClaimValueTypes.String) }; var userIdentity = new ClaimsIdentity(claims, "SecureLogin"); var userPrincipal = new ClaimsPrincipal(userIdentity); _userInfoService.UpdateUserInfo(new UserInfo() { Id = userInfo.drfocode + userInfo.lastname, UserCultureInfo = new UserCultureInfo(), LoginData = new Dictionary <string, string>() { { "FullName", userInfo.subjectcn }, { "OrganizationName", userInfo.o }, { "Position", userInfo.title }, { "Name", userInfo.givenname }, { "MiddleName", userInfo.middlename }, { "LastName", userInfo.lastname }, { "Email", userInfo.email }, { "Address", userInfo.address }, { "Phone", userInfo.phone }, { "EDRPOU", userInfo.edrpoucode }, { "INN", userInfo.drfocode }, { "SerialNumber", userInfo.serial }, { "OrganizationId", res.organizationId } }, UserId = res.employeeId, ProfileId = res.profileId, PersonId = res.personId }); await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, userPrincipal, new AuthenticationProperties { ExpiresUtc = DateTime.UtcNow.AddHours(8), IsPersistent = false, AllowRefresh = false }); if (register == "0") { return(RedirectToAction("SignIn")); } return(RedirectToAction("Index", "Home")); }