인증 프로세스가 무엇입니까#이.
사용자 정보 인증 요청 및 활용
인용문:
지난번에 블로그에서 우리는 사용자 신분 검증의 주제를 깊이 있게 연구하고 내가 생각하는 가장 외적인 과정을 연구했다."사용자 인증"모델이 무엇을 필요로 하는지, Passport를 어떻게 사용하는지 간략하게 정의했습니다.js 라이브러리에서 이 목표를 실현합니다.Passport를 통해 제공되는 모든 다른 인증 정책을 포함하지는 않지만우리는 확실히 가장 전통적인 사용자 인증 방법인'로컬'정책을 묘사했다.로컬 정책은 사용자가 사용자 이름과 비밀번호를 만들 수 있도록 설정하는 과정과 관련이 있습니다. 사용자 이름과 비밀번호는 영구화되고 응용 프로그램에 대한 제한된 접근 권한을 부여하는 데 사용됩니다.이 글의 목표는 사용자 인증 제어 흐름의 두 번째 층을 깊이 연구하고 패키지를 해제하는 것이다. 첫 번째 리셋 방향이 떠나고 사용자가 인증 요청과 최종 리셋 방향이 신뢰받는 고객의 응용 프로그램으로 돌아가는 과정에서 발생하는 사건을 해결하는 것이다.
리디렉션과 인증 요청 사이에는 어떤 일이 발생합니까?
사용자가 우리 홈페이지에 로그인하고 로그인하라는 알림을 받으면 OAuth 공급업체로 다시 지정됩니다. 그곳에서 권한 수여 링크를 누르면 어떻게 합니까?자, 이제 OAuth 프로세스에 들어갔습니다. 사용자는 프로그램이 비밀번호를 공개하지 않고 프로필 정보를 사용할 수 있도록 권한을 부여할 것입니다.다음 문제는 만약 그들이 비밀번호를 제공하지 않는다면, 우리 프로그램은 그들에게 접근 권한을 부여하기 위해 무엇을 사용합니까?사용자 검증이 성공하면 OAuth 공급자는 우리의 응용 프로그램 소비자에게 OAuth 또는 방문 영패라고 불리는 임시 통행증을 수여할 것이다.나는 이러한 영패가 사용자 정보에 대한 유한한 접근 채널과 같다고 생각한다. 이 채널에서 우리의 응용 프로그램이 사용할 수 있는 정확한 정보는 영패에 지정되고 사용자와 관련된 어떠한 민감한 정보도 영원히 공개되지 않을 것이다.
코드 예: 액세스 토큰
{
"access_token":"RsT5OjbzRn430zqMLgV3Ia",
"expires_in":3600
}
위의 코드 세션은 OAuth 제공 프로그램을 통해 프로그램에 접근하는 영패로 되돌아오는 예시입니다.보시다시피, 영패는 id 문자열과 만료 시간을 포함합니다.우리가 토큰을 받은 후에 무슨 일이 일어날까요?
현재 저희 프로그램은 인증된 접근 영패를 가지고 있습니다. 이 영패가 유효하기만 하면 공급자 API에 HTTP 요청을 해서 정보를 얻을 수 있습니다.그러나 우리가 더 관심을 가지는 것은 여권 영패와 함께 돌아오는 사용자 프로필 정보다.우리는 js 정책을 설정하여 응용 프로그램에 통합시켰다.정책 구성에는 일치하는 프로필 정보를 가진 사용자 정보를 찾을 수 있는'검증 리셋'이라는 함수가 포함되어 있습니다.만약 우리가 이 사용자를 만난 적이 없다면, 그들의 정보는 우리의 데이터베이스에 보존되지 않을 것이다. 우리는 지금 그들을 위해 항목을 만들어야 하지만, 만약 그들이 위치에 있다면, 상응하는 정보를 되돌려 줄 것이다.현재 정보는 인증된 리셋된done () 함수에 전달되어 요청 대상의 사용자로 저장됩니다.
코드 예: Passport.js OAuth 정책 구성
passport.use(new GoogleStrategy({
// define the options to use with google strategy
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: process.env.GOOGLE_CALLBACK_URL,
},
((accessToken, refreshToken, profile, done) => {
// deconstruct variables from profile object
const { id, displayName } = profile;
const userObj = {
idDiscord: id,
username: displayName,
profilePhotoUrl: profile.photos[0].value,
};
getUser(userObj)
.then((gotUser) => {
if (gotUser) {
done(null, gotUser);
} else {
addUser(userObj)
.then((newUser) => {
done(null, newUser);
});
}
})
.catch((error) => {
console.log(error);
});
}
위의 코드 세그먼트에서'검증 리셋'에 포함된 코드 블록의 제어 흐름을 따를 수 있습니다.사용자 id, 디스플레이 이름과 사진 URL은 되돌아오는 구글 개인 정보 정보에서userObj로 해독됩니다.그리고 변수userObj를 매개 변수로 getUser()
함수에 전달합니다. 이 함수는 데이터베이스에 있는 일치하는 항목을 조회합니다.성공적인 일치 항목을 찾으면 이 정보를 되돌려 done(null, gotUser)
함수에 전달하지만, 데이터베이스에서 일치 항목을 찾지 못하면sperate 함수adduser()
를 호출하여 사용자를 위한 항목을 만듭니다.새로 저장된 사용자 정보가 현재 되돌아와 done(null, newUser)
함수에 전달됩니다.코드에 표시되지 않지만 Passport가 백그라운드에서 처리하는 부분입니다.js는 req.login()
의 호출입니다.코드 예: Passport.js 로그인 기능
req.login(user, function(err) {
if (err) { return next(err); }
return res.redirect('/users/' + req.user.username);
});
여권js 라이브러리는 요청 대상에 공개된 로그인 함수를 가지고 있으며, 이 함수는 되돌아오는 사용자 정보를 요청으로 추가합니다 done()
.사용자이러한 정보는 우리 응용 프로그램에서 서로 다른 방식으로 사용할 수 있으며, 일반적으로 권한 수여에 사용되지만, 가장 흔히 볼 수 있는 것은 새로운 사용자 세션을 만드는 데 쓰인다.우리가 인증 중간부품의 설정에서 그것을 보지 못한 이유는 Passport 때문이다.이 부품을 사용할 때 js는 자동으로 호출됩니다 req.login()
.지금, 이것은 당신의 모자 밑에 저장된 위대한 정보가 아닙니다. 다음을 위해?결론:
놀랍게도 제 연구에서 사용자 인증과 사용자 세션이 같은 과정에 있지 않다는 것을 발견했기 때문에 저는 OAuth 흐름의 2급을 깊이 연구하지 않았습니다.다음에는 사용자 세션과 모든 Passport를 패키지화하여 OAuth에 대한 탐색을 완료할 것입니다.이 과정에서 관련된 js 기능.다음까지 사용자 인증에 대한 새로운 지식을 습득할 수 있기를 바랍니다.
즐거운 인코딩!!!
자료 출처:
Reference
이 문제에 관하여(인증 프로세스가 무엇입니까#이.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jamesfthomas/just-which-way-does-the-auth-flow-2-1dkf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)