Windows Forms 앱 인증에 Cognito를 사용해 보았습니다.
12706 단어 VisualStudioWindowsFormC#cognitoAWS
개요
Cognito에서 준비한 계정으로 Windows Form 앱에 로그인합니다.
로그인을 통과하면 Cognito에서 AWS 계정(S3 참조 권한 포함)을 받습니다.
S3 버킷 목록을 표시합니다.
전제
일련의 인증을 할 수 있는 형태를 Cognito로 만들어 둔다↓
Cognito 임베디드 웹 페이지 + S3에서만 동적 사이트 만들기
여기에는 다음 매개 변수가 필요합니다.
매개변수
예
사용자 풀 ID
us-east-1_hhogehogeh
애플리케이션 클라이언트 ID
4ks0na9rghogehogehoge0l
ID 풀 ID
us-east-1:7864a4bf-8045-4221-a280-hogehogehoge
그리고 S3 버킷도 준비해 둡니다.
출처
폼 디자인은 ↓ 이런 느낌
ID와 비밀번호를 입력하고 Login 버튼을 누르면 무언가가 일어나는 느낌으로 둡니다.
로그인 버튼 클릭시 비동기적으로 실행합니다.
/*
ここで使う変数
wwRegion :: Cognitoのリージョン
wwUserPoolID ::CognitoのユーザプールID
wwAppClientID ::CognitoのアプリケーションクライアントID
txtID.Text ::フォーム上のIDテキストボックス
txtPass.Text ::フォーム上のPasswordテキストボックス
wwIdPoolID ::CognitoのIDプールのID
wwS3BucketName::S3バケット名
*/
private async void btnLogin_ClickAsync(object sender, EventArgs e)
{
AmazonCognitoIdentityProviderClient provider = new AmazonCognitoIdentityProviderClient(new Amazon.Runtime.AnonymousAWSCredentials(), wwRegion);
CognitoUserPool userPool = new CognitoUserPool(wwUserPoolID, wwAppClientID, provider);
CognitoUser user = new CognitoUser(txtID.Text, wwAppClientID, userPool, provider);
InitiateSrpAuthRequest authRequest = new InitiateSrpAuthRequest()
{
Password = txtPass.Text
};
AuthFlowResponse authResponse = await user.StartWithSrpAuthAsync(authRequest).ConfigureAwait(false);
string idToken = authResponse.AuthenticationResult.IdToken;
CognitoAWSCredentials credentials = new CognitoAWSCredentials(
wwIdPoolID, // ID プールの ID
wwRegion // リージョン
);
credentials.AddLogin("cognito-idp.us-east-1.amazonaws.com/" + wwUserPoolID, idToken); // the raw token
//↓おまじない
string hoge = await credentials.GetIdentityIdAsync();
//ここから下は、通常のAPIの利用方法
using (var client = new AmazonS3Client(credentials, wwRegion))
{
var S3Request = new ListObjectsRequest();
S3Request.BucketName = wwS3BucketName;
var S3Response = await client.ListObjectsAsync(S3Request);
//ここでオブジェクトがとれている(略)
}
}
해설
제대로 이해하지는 않기 때문에 동물 감각으로 설명
일련의 인증을 할 수 있는 형태를 Cognito로 만들어 둔다↓
Cognito 임베디드 웹 페이지 + S3에서만 동적 사이트 만들기
여기에는 다음 매개 변수가 필요합니다.
매개변수
예
사용자 풀 ID
us-east-1_hhogehogeh
애플리케이션 클라이언트 ID
4ks0na9rghogehogehoge0l
ID 풀 ID
us-east-1:7864a4bf-8045-4221-a280-hogehogehoge
그리고 S3 버킷도 준비해 둡니다.
출처
폼 디자인은 ↓ 이런 느낌
ID와 비밀번호를 입력하고 Login 버튼을 누르면 무언가가 일어나는 느낌으로 둡니다.
로그인 버튼 클릭시 비동기적으로 실행합니다.
/*
ここで使う変数
wwRegion :: Cognitoのリージョン
wwUserPoolID ::CognitoのユーザプールID
wwAppClientID ::CognitoのアプリケーションクライアントID
txtID.Text ::フォーム上のIDテキストボックス
txtPass.Text ::フォーム上のPasswordテキストボックス
wwIdPoolID ::CognitoのIDプールのID
wwS3BucketName::S3バケット名
*/
private async void btnLogin_ClickAsync(object sender, EventArgs e)
{
AmazonCognitoIdentityProviderClient provider = new AmazonCognitoIdentityProviderClient(new Amazon.Runtime.AnonymousAWSCredentials(), wwRegion);
CognitoUserPool userPool = new CognitoUserPool(wwUserPoolID, wwAppClientID, provider);
CognitoUser user = new CognitoUser(txtID.Text, wwAppClientID, userPool, provider);
InitiateSrpAuthRequest authRequest = new InitiateSrpAuthRequest()
{
Password = txtPass.Text
};
AuthFlowResponse authResponse = await user.StartWithSrpAuthAsync(authRequest).ConfigureAwait(false);
string idToken = authResponse.AuthenticationResult.IdToken;
CognitoAWSCredentials credentials = new CognitoAWSCredentials(
wwIdPoolID, // ID プールの ID
wwRegion // リージョン
);
credentials.AddLogin("cognito-idp.us-east-1.amazonaws.com/" + wwUserPoolID, idToken); // the raw token
//↓おまじない
string hoge = await credentials.GetIdentityIdAsync();
//ここから下は、通常のAPIの利用方法
using (var client = new AmazonS3Client(credentials, wwRegion))
{
var S3Request = new ListObjectsRequest();
S3Request.BucketName = wwS3BucketName;
var S3Response = await client.ListObjectsAsync(S3Request);
//ここでオブジェクトがとれている(略)
}
}
해설
제대로 이해하지는 않기 때문에 동물 감각으로 설명
/*
ここで使う変数
wwRegion :: Cognitoのリージョン
wwUserPoolID ::CognitoのユーザプールID
wwAppClientID ::CognitoのアプリケーションクライアントID
txtID.Text ::フォーム上のIDテキストボックス
txtPass.Text ::フォーム上のPasswordテキストボックス
wwIdPoolID ::CognitoのIDプールのID
wwS3BucketName::S3バケット名
*/
private async void btnLogin_ClickAsync(object sender, EventArgs e)
{
AmazonCognitoIdentityProviderClient provider = new AmazonCognitoIdentityProviderClient(new Amazon.Runtime.AnonymousAWSCredentials(), wwRegion);
CognitoUserPool userPool = new CognitoUserPool(wwUserPoolID, wwAppClientID, provider);
CognitoUser user = new CognitoUser(txtID.Text, wwAppClientID, userPool, provider);
InitiateSrpAuthRequest authRequest = new InitiateSrpAuthRequest()
{
Password = txtPass.Text
};
AuthFlowResponse authResponse = await user.StartWithSrpAuthAsync(authRequest).ConfigureAwait(false);
string idToken = authResponse.AuthenticationResult.IdToken;
CognitoAWSCredentials credentials = new CognitoAWSCredentials(
wwIdPoolID, // ID プールの ID
wwRegion // リージョン
);
credentials.AddLogin("cognito-idp.us-east-1.amazonaws.com/" + wwUserPoolID, idToken); // the raw token
//↓おまじない
string hoge = await credentials.GetIdentityIdAsync();
//ここから下は、通常のAPIの利用方法
using (var client = new AmazonS3Client(credentials, wwRegion))
{
var S3Request = new ListObjectsRequest();
S3Request.BucketName = wwS3BucketName;
var S3Response = await client.ListObjectsAsync(S3Request);
//ここでオブジェクトがとれている(略)
}
}
제대로 이해하지는 않기 때문에 동물 감각으로 설명
1. 입력한 ID/비밀번호로부터 토큰을 얻는다
공식: Amazon CognitoAuthentication 확장 라이브러리의 예에 쓰여진 것
AmazonCognitoIdentityProviderClient provider = new AmazonCognitoIdentityProviderClient(new Amazon.Runtime.AnonymousAWSCredentials(), wwRegion);
CognitoUserPool userPool = new CognitoUserPool(wwUserPoolID, wwAppClientID, provider);
CognitoUser user = new CognitoUser(txtID.Text, wwAppClientID, userPool, provider);
InitiateSrpAuthRequest authRequest = new InitiateSrpAuthRequest()
{
Password = txtPass.Text
};
AuthFlowResponse authResponse = await user.StartWithSrpAuthAsync(authRequest).ConfigureAwait(false);
string idToken = authResponse.AuthenticationResult.IdToken;
토큰은 액세스 토큰, ID 토큰 및 기타가있는 모습 (자세한 내용은 여기)
ID 및 비밀번호가 Cognito로 등록된 사용자에게 해당하면 idToken에 긴 문자열이 설정됩니다.
2. 토큰을 사용하여 AWS 권한 부여 얻기
페더레이티드 아이덴티티 샘플 코드 → AWS 자격 증명 얻기 소스 코드 사용
CognitoAWSCredentials credentials = new CognitoAWSCredentials(
wwIdPoolID, // ID プールの ID
wwRegion // リージョン
);
credential 객체에 위에서 얻은 ID 토큰을 전달합니다.
credentials.AddLogin("cognito-idp.us-east-1.amazonaws.com/" + wwUserPoolID, idToken);
//↓おまじない
string hoge = await credentials.GetIdentityIdAsync();
확실하지 않지만 속이지 않습니다.
여기에서 얻을 수 있는 AWS 계정은 👇 이것입니다.
3.다음은, 통상의 인증과 같이 사용할 수 있다
using (var client = new AmazonS3Client(credentials, wwRegion))
{
var S3Request = new ListObjectsRequest();
S3Request.BucketName = wwS3BucketName;
var S3Response = await client.ListObjectsAsync(S3Request);
//ここでオブジェクトがとれている(略)
}
요약
.Net계는 좀처럼 정보를 찾을 수 없다. .
수시로 수정합니다. .
Reference
이 문제에 관하여(Windows Forms 앱 인증에 Cognito를 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/afukuma/items/53d96cf83b553f4a5b56텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)