Exemplo n.º 1
0
        /// <summary>
        /// 유효성 검사
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public Task ValidateAsync(ResourceOwnerPasswordValidationContext context)
        {
            if (_userRepository.ValidateCredentials(context.UserName, context.Password))
            {//일치하는 유저 정보가 있다.
                //유저 정보 불러오기
                UserRepositoryModel user = _userRepository.FindByEmail(context.UserName);

                //권한 부여 유형을 지정한다.
                context.Result
                    = new GrantValidationResult(user.idUser.ToString()
                                                , OidcConstants.AuthenticationMethods.Password);
            }
            else
            {//실패
                //실패 코드 작성
                Dictionary <string, object> dictError = new Dictionary <string, object>();
                dictError.Add("errorCode", "1");

                //실패 메시지 전달
                context.Result
                    = new GrantValidationResult(TokenRequestErrors.InvalidGrant
                                                , "invalid credential"
                                                , dictError);
            }



            return(Task.FromResult(0));
        }
        /// <summary>
        /// 전달받은 서브젝트아이디가 있는지 확인한다.
        /// 주의 : 직접 참조만 없을뿐이지 실제론 사용된다.
        /// 경고 : CS1998
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task IsActiveAsync(IsActiveContext context)
        {
            int nID = Convert.ToInt32(context.Subject.GetSubjectId());
            UserRepositoryModel user = _userRepository.FindById(nID);

            //여기서 인증성공여부를 판단해서 메시지를 보낼 수 있을듯 한데...
            //인증관련 내용만 처리 가능
            //context.Subject.Claims
            context.IsActive = user != null;
        }
        /// <summary>
        /// 로그인에 사용하는 UserSignInfoModel을
        /// IdentityServer4_Custom.UserServices.UserRepositoryModel 로 변환한다.
        /// </summary>
        /// <param name="insUserDB"></param>
        /// <returns></returns>
        private UserRepositoryModel ToUserRepositoryModel(UserSignInfoModel insUserDB)
        {
            UserRepositoryModel urmReturn = null;

            if (null != insUserDB)
            {//데이터가 있다.
                urmReturn           = new UserRepositoryModel();
                urmReturn.idUser    = insUserDB.ID;
                urmReturn.SignEmail = insUserDB.Email;
                urmReturn.Password  = insUserDB.Password;
            }


            return(urmReturn);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 로그인에 사용하는 UserSignInfoModel을
        /// IdentityServer4_Custom.UserServices.UserRepositoryModel 로 변환한다.
        /// </summary>
        /// <param name="insUserDB"></param>
        /// <returns></returns>
        private UserRepositoryModel ToUserRepositoryModel(UserAuthModel insUserDB)
        {
            UserRepositoryModel urmReturn = null;

            if (null != insUserDB)
            {//데이터가 있다.
                urmReturn           = new UserRepositoryModel();
                urmReturn.idUser    = insUserDB.idUser;
                urmReturn.SignEmail = insUserDB.SignEmail;
                urmReturn.Password  = string.Empty;
            }


            return(urmReturn);
        }
        /// <summary>
        /// 서브젝트아이디에 해당하는 정보를 만든다.
        /// 주의 : 직접 참조만 없을뿐이지 실제론 사용된다.
        /// 경고 : CS1998
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task GetProfileDataAsync(ProfileDataRequestContext context)
        {
            int nID = Convert.ToInt32(context.Subject.GetSubjectId());

            Logger.LogDebug("Get profile called for subject {subject} from client {client} with claim types {claimTypes} via {caller}",
                            context.Subject.GetSubjectId(),
                            context.Client.ClientName ?? context.Client.ClientId,
                            context.RequestedClaimTypes,
                            context.Caller);

            UserRepositoryModel user = _userRepository.FindById(nID);

            var claims = new List <Claim>
            {
                new Claim("role", "dataEventRecords.admin"),
                new Claim("role", "dataEventRecords.user"),
                new Claim("id", user.idUser.ToString()),
                new Claim("email", user.SignEmail)
            };

            context.IssuedClaims = claims;
        }