Pythhon을 통한 AWS Cognito 인증 with Facebook 인증
일이라면 열심히 하세요(서류 관계를 모두 쓰는 부서에 던져 버리는 것).개인적으로 웹 서비스를 쉽게 공개하고 싶을 때는 할 수 없습니다.그래서 외부 인증을 받고자 이번에 페이스북 인증을 통해 AWS 코그니토 인증을 했다.
사전 준비
우선 페이스북에서 인증해야 한다.페이스북의 개발자 대상 페이지(일본어)에는 조작법이 적혀 있는데 위에서부터 순서대로 진행하면 거의 끝나지 않는다.
https://developers.facebook.com/docs/apps/register?locale=ja_JP#developer-account
대체로 다음과 같은 느낌
페이스북 개발자 등록
한 걸음만 누르면 돼.페이스북의 Developers 계정 등록이 완료된 메일을 보냅니다.
페이스북 앱 만들기
새 응용 프로그램 만들기 링크를 사용하여 응용 프로그램을 만들 수 있습니다.갑자기 앱 아이디가 차여서 이걸 기억해.인증만 사용한다면 기본적으로 설정할 필요가 없다.
앱이 완성되면'제품 추가'자리에 줄을 서는'페이스북 로그인'이 추가된다.오른쪽 아래 설정 버튼을 누르면 추가됩니다.
FacebookSDK를 사용한 액세스
빠른 속도로 제작을 시작합니다.이번에 웹 페이지를 선택했기 때문에 자바스크립트를 통해 접근할 수 있습니다.
이렇게 말하지만 기본적으로 코드를 쓰는 거예요. 복사하고 붙여넣은 다음에 조금만 수정할 뿐이에요.
window.fbAsyncInit = function() {
FB.init({
appId : '{your-app-id}',
cookie : true,
xfbml : true,
version : '{latest-api-version}'
});
FB.AppEvents.logPageView();
};
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "https://connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
your-app-id와latest-appi-version을 고쳐 사용합니다.your-app-id 부분에서 기억하는 응용 프로그램 ID는 latest-appi-version이 도표 API 버전으로 쓸 때'v3'입니다.0'이 최신이라서 이걸 썼어요.버전에 대해서는 https://developers.facebook.com/docs/graph-api/changelog/를 참조하십시오.판본마다 기한이 있기 때문에 먼저 보도 v3를 보십시오.0이면 된다고 할 수는 없다.빠른 시작의 다음 항목에 들어가면
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
불러달라는 전화가 있어서.function checkLoginState() {
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
}
함수화 후<button onClick="checkLoginState()">認証</button>
를 참고하십시오.※ SDK를 동적으로 불러오기 때문에 버튼을 눌렀을 때 불러오기가 제때에 완료되지 않을 때가 있습니다(´/ω・‘)
인증 후 처리된 statusChangeCallback 함수는 스스로 생성됩니다.
예를 들면 이런 느낌.
function statusChangeCallback(response){
// response.authResponse.accessTokenがあれば成功とみなせる
if(response && response.authResponse && response.authResponse.accessToken){
// 認証に成功したときの処理。ここではユーザー名を取得してからAWS認証を実行している
// ユーザー名が必要なければ、response.authResponse.accessToken をPOSTするだけでいい
FB.api("/" + response.authResponse.userID, function(res) {
var user_name = res.name; // Facebook上の名前をPOSTで送ることができる
// TODO: ここでAjaxで response.authResponse.accessToken をPOSTする
// TODO: POSTした結果(認証の成否)を受け取ってリダイレクト先に飛ばす
});
}else{
// Facebookログイン画面のポップアップを表示する
FB.login(statusChangeCallback);
}
}
FB.로인(login)을 사용하면 페이스북이 준비한 로그인 화면이 뜨는데 매우 간단하다.AWS 인증 사용
IAM 준비
이전 글와 마찬가지로 파이톤을 이용한 AWS 접근을 위해 사전에 IAM을 통해 접근용 사용자를 제작한다.캐릭터는 Amazon Cognito ReadOnly, 괜찮아요.
AWS Cognito 설정
AWS의 Cognito 화면에서 ID 풀 관리부터 새 ID 풀을 만듭니다.캐릭터 설정은 기본 상태를 유지하는 데 문제가 없습니다.
아이디 수영장 이름이 적절히 결정되면 아이디 수영장 아이디가 적힌 곳의 아이디를 기억해 두세요.ap-northeast-1:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
인증 제공자가 이번에 페이스북을 선택했다.
페이스북뿐만 아니라 다양한 인증과 협력할 수 있고 사용자 정보를 스스로 관리하지 않아도 대다수 사용자에 대응할 수 있다.페이스북 앱 ID가 있는 곳에 페이스북에서 일할 때 기억하는 앱 ID를 입력하세요.
제작 버튼을 눌러 완성하세요.
파이썬으로 인증
boto 3을 사용하여 Pytohon에서 AWS에 액세스합니다.보통 pip로 담아요.pip install --upgrade boto3
※ 글을 쓸 때는 1.7.48로 진입
cognito-identity를 통해 클라이언트 대상을 만들어getid()가 성공하면 인증이 성공합니다.인증 실패 시 예외가 발생할 수 있습니다.try-except로 둘러싸서 프로그램이 떨어지지 않도록 하십시오.
그리고 AWS.ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY는 절대 하드코딩을 하거나 VCC에 등록하지 마십시오.import sys
import boto3
def aws_cognito_with_facebook(facebook_access_token):
try:
aws_client = boto3.client('cognito-identity',
region_name = "ap-northeast-1",
aws_access_key_id = "ここにAWS_ACCESS_KEY_IDを設定します",
aws_secret_access_key = "ここにAWS_SECRET_ACCESS_KEYを設定します",
)
return aws_client.get_id(
IdentityPoolId = "ここにAWS Cognitoで作ったIDプールのIDを設定します",
Logins = {
"graph.facebook.com": facebook_access_token
}
)
except:
print(sys.exc_info())
return None
그런 다음 POST에서 받은 페이스북의 액세스 토큰을 매개 변수에 넣어 함수를 호출하면 된다.인증이 성공하면 인증 정보가 있는 Lenovo 배열이 반환되고 실패할 경우 None이 반환됩니다.
페이스북의 액세스 토큰은 각 세션 정보에 저장되며, 인증 시 이 값을 사용하는 것이 좋다.여러 외부 인증이 가능합니다.# ※FacebookアクセストークンをPOSTで受け取ったら、session["cognito"]["facebook"]に保存しておく
# 他の認証でトークンを受け取ったらsession["cognito"]["認証先の名前"]で保存しておく
# 複数の認証に対応した認証関数
def aws_cognito_auth():
result = None
if "facebook" in session["cognito"]:
result = aws_cognito_with_facebook(session["cognito"]["facebook"])
else:
# 他の認証も行える
return result
어쨌든 이번엔 페이스북밖에 없어요.
스스로 인증 정보를 관리할 필요가 없으니 정말 다행입니다!( ^ω^)
Reference
이 문제에 관하여(Pythhon을 통한 AWS Cognito 인증 with Facebook 인증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/jp_ibis/items/d07371389055aac7b211
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
pip install --upgrade boto3
import sys
import boto3
def aws_cognito_with_facebook(facebook_access_token):
try:
aws_client = boto3.client('cognito-identity',
region_name = "ap-northeast-1",
aws_access_key_id = "ここにAWS_ACCESS_KEY_IDを設定します",
aws_secret_access_key = "ここにAWS_SECRET_ACCESS_KEYを設定します",
)
return aws_client.get_id(
IdentityPoolId = "ここにAWS Cognitoで作ったIDプールのIDを設定します",
Logins = {
"graph.facebook.com": facebook_access_token
}
)
except:
print(sys.exc_info())
return None
# ※FacebookアクセストークンをPOSTで受け取ったら、session["cognito"]["facebook"]に保存しておく
# 他の認証でトークンを受け取ったらsession["cognito"]["認証先の名前"]で保存しておく
# 複数の認証に対応した認証関数
def aws_cognito_auth():
result = None
if "facebook" in session["cognito"]:
result = aws_cognito_with_facebook(session["cognito"]["facebook"])
else:
# 他の認証も行える
return result
Reference
이 문제에 관하여(Pythhon을 통한 AWS Cognito 인증 with Facebook 인증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/jp_ibis/items/d07371389055aac7b211텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)