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));
        }