public IActionResult Authentication(SimDeviceAuthenticationRequest simDeviceAuthenticationRequest) { var simMsisdn = simDeviceAuthenticationRequest.SimMsisdn; var simImsi = simDeviceAuthenticationRequest.SimImsi; var simIccId = simDeviceAuthenticationRequest.SimIccId; var deviceImei = simDeviceAuthenticationRequest.DeviceImei; var simDevice = _authenticationRepository.GetSimDevice(simMsisdn, simImsi, simIccId, deviceImei); if (simDevice == null) { Sim sim = _authenticationRepository.GetSim(simMsisdn, simImsi, simIccId); CreateSimDeviceAuthenticationFail(sim); _radiusDbRepository.UpdateRadreply(sim, false); return(Unauthorized(NotMatchSimDevice)); } // 認証成功のSimDeviceによって それに対応する LoginできるUser を検索します var canLogonUsers = _authenticationRepository.GetLoginUsers(simDevice); _radiusDbRepository.UpdateRadreply(simDevice.Sim, true); CreateSimDeviceAuthenticationSuccess(simDevice); // SimDeviceによって 認証状態を検索する すでに登録したら SimDeviceAuthenticationStateDone を更新します var simDeviceAuthenticationStateDone = CreateSimDeviceAuthenticationStateDone(simDevice); var simDeviceAuthenticationResponse = CreateSimDeviceAuthenticationResponse(simDeviceAuthenticationStateDone, simDevice, canLogonUsers); return(Ok(simDeviceAuthenticationResponse)); }
protected HttpResponseMessage PostSimDeviceAuthentication(SimDeviceAuthenticationRequest simDeviceAuthenticationRequest) { var url = "api/sim_device/authentication"; var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, url) { Content = new StringContent(JsonConvert.SerializeObject(simDeviceAuthenticationRequest), Encoding.UTF8, MediaTypeNames.Application.Json) }; return(Post(httpRequestMessage)); }
public IActionResult Authentication(SimDeviceAuthenticationRequest simDeviceAuthenticationRequest) { var simMsisdn = simDeviceAuthenticationRequest.SimMsisdn; var simImsi = simDeviceAuthenticationRequest.SimImsi; var simIccId = simDeviceAuthenticationRequest.SimIccId; var certBase64String = simDeviceAuthenticationRequest.ClientCertificationBase64; var subjectCn = CertificateUtil.GetSubjectCommonNameByCertificationBase64(certBase64String); if (subjectCn == null) { var validationProblemDetails = ProblemDetailsFactory.CreateValidationProblemDetails(HttpContext, ModelState); validationProblemDetails.Errors.Add(new KeyValuePair <string, string[]>("ClientCertificationBase64", new[] { "certification_invalid" })); return(BadRequest(validationProblemDetails)); } var simDevice = _authenticationRepository.GetSimDevice(simMsisdn, simImsi, simIccId, subjectCn); if (simDevice == null) { Sim sim = _authenticationRepository.GetSim(simMsisdn, simImsi, simIccId); if (sim == null) { _logger.LogWarning($"Not Found SIM:{simMsisdn}"); } else { CreateSimAndDeviceAuthenticationFailureLog(sim); _radiusDbRepository.UpdateRadreply(sim.UserName + "@" + sim.SimGroup.UserNameSuffix); } return(Unauthorized(NotMatchSimDevice)); } // 認証成功のSimDeviceによって それに対応する LoginできるUser を検索します var canLogonUsers = _authenticationRepository.GetLoginUsers(subjectCn); _radiusDbRepository.UpdateRadreply(simDevice.Sim.UserName + "@" + simDevice.Sim.SimGroup.UserNameSuffix, simDevice.IsolatedNw2Ip); CreateSimAndDeviceAuthenticationSuccessLog(simDevice); // SimDeviceによって 認証状態を検索する すでに登録したら SimAndDeviceAuthenticated を更新します var simDeviceAuthenticationStateDone = CreateSimAndDeviceAuthenticated(simDevice); var simDeviceAuthenticationResponse = CreateSimDeviceAuthenticationResponse(simDeviceAuthenticationStateDone, simDevice, canLogonUsers); return(Ok(simDeviceAuthenticationResponse)); }