Keycloak에서 Opent ID Connect에서 승인된 코드 스트림을 시도해 보십시오.

미래 디자이너 advent 달력의 다음날이다.
미등 디자인 Advent Calendar 2021 캘린더 | Advent Calendar 2021 - Qita
첫날은이삭씨입니다.
나도 IntelliJ를 계속 사용하고 있지만 배경 그림을 설정할 수 있을지 모르겠다.감사합니다.
다음날, 최근에 접촉한 Keycloak에서 OIDC의 인증 코드 흐름을 시도해 보고 싶습니다.
이 보도가 해야 할 일
Keycloak으로 OIDC의 인증 코드 흐름을 시도해 보십시오.
나는 라벨의 코드가 실제로 어떻게 하는지 접촉하고 싶다.
OIDC에 대한 내용은 없습니다.대신 자신이 OIDC를 배울 때 참고했던 참고서와 기사를 붙인다.
OpenID Connect 시작: 개념에서 보안 시스템으로의 제어
분위기 속에서 사용하지 말고 잘 이해해라!OAuth2 정리해.0 사용 자습서 (Next Pubishing) | Auth 홈 | 공학 | kindle store | Amazon
실제로 행동하고 싶은 사람.
환경 구조
  • github에서pull 코드
    GitHub - kakiuchi-miraito/keycloak-oidc
  • make up
  • http://localhost:8082/auth/
  • Keycloak 화면이 나오면 OK.

    이어 키클로크의 관리 화면에서 인증을 받은 사용자와 고객(이번에는 라벨)을 추가했다.
  • Administration Constore 액세스
  • id/password : admin/admin
  • 클라이언트 추가
  • Clients > Create

  • Consent Required
  • 동의화면 표시 설정
  • Access Type을 confidential
  • 로 변경
  • Valid Redirect URIShttp://localhost*를 입력합니다.
  • Credentials의 Secret
  • 복제

    User 추가
  • Users > Add user
  • Username (무엇이든 ok)
  • 입력
    3DF547F9-546C-4AC0-9AEB-3D6C4AC76092.png
  • Credentials에서 Password 설정
  • Temporary 종료
  • 사용자가 로그인한 후에 비밀번호 설정을 변경해야 하는지 여부.이번엔 괜찮아,off

  • 라이센스 코드 스트림 시도

    라이센스 코드 스트림을 통해 ID token 가져오기

  • 수정backend/app/Http/Controllers/TokenRequest.phpclient_idclient_secret된 클라이언트 값

  • 액세스http://localhost/getAuthorizationCode
  • Keycleak의 로그인 화면 표시
  • 동의화면 표시
  • 참고로 동의하면 역사 기록을 남기고 다음부터 동의화면
  • Users>Concents에서 기록을 삭제할 수 있음
  • 로그인 후 ID Token
  • 취득 가능

  • JSON Web Tokens - jwt.io에서 ID Token을 디코딩할 때 User의 정보를 확인할 수 있음
  • 관리 화면에 user의 이메일을 추가하면 ID Token에도 Email의 정보를 반영한다

  • 코드 해설
    승인 코드 가져오기backend/app/Http/Controllers/GetAuthorizationCode.php
    header(
        'Location: <http://localhost:8082/auth/realms/master/protocol/openid-connect/auth?'> .
        'response_type=code&' .
        'client_id=test-client&' .
        'redirect_uri=' . urlencode('<http://localhost/tokenRequest>') . '&' .
        'code_challenge=' . $codeChallenge . '&' .
        'code_challenge_method=S256&' .
        'scope=openid'
    );
    
    
  • Location
  • 승인 엔드포인트
  • response_type
  • 필요한 매개 변수로 승인 요청response_type
  • codetokenid_tokennone지정 가능

  • scope의 조합을 통해 프로세스 결정
  • OpenID Connect 전체 프로세스 설명 - Qita
  • client_id
  • 생성된 클라이언트의 ID
  • 를 지정합니다.
  • redirect_uri
  • 인증 완료 후 허가코드를 추가하여 방향을 바꾸는 ui
  • scope
  • openid를 지정한 상황에서 ID Token을 취득하여 OIDC
  • 가 된다.
  • code 액세스 토큰만 수령
  • scope에서 얻은 값
  • Final: OpenID Connect Core 1.0 incorporating errata set 1
  • PKCE 정보
    Auth0을 이용하여 OAuth 2.0의 PKCE를 이해하다
    PKCE는 인가코드를 가로채는 공격 대책으로 정의됐다.

    연관성code_challenge_method code_challenge code_verifier code_verifier 영패 요청 시 나타납니다.
  • code_challenge_method에 기재된 방법으로 code_verifier를 변환하여 제작code_challenge
  • code_challenge_method 권한 수여를 요청할 때code_challenge를 권한 수여 서버에 보내고 권한 수여 서버 옆에 저장
  • 방문 영패 요청 시 발송code_verifier, 권한 수여 서버 측에서 code_verifier에서 생성code_challenge, 저장된 code_challenge와 비교하여 제3자가 권한 수여 코드를 발송하지 않았음을 확인한다.
  • code_challenge_method 또는 plain
  • 프린이 변환되지 않기 때문에S256=code_challenge안전성에 취약
  • code_verifier SHA 256 해싱을 base 64URL 인코딩하는 방법

  • 선택해야 함S256
  • 액세스 토큰 요청S256
    $client = new Client();
    $method = 'POST';
    $uri = '<http://keycloak:8080/auth/realms/master/protocol/openid-connect/token>';
    $options = [
        'client_id' => 'test-client',
        'client_secret' => '88a69be6-eac6-4d0e-bbd5-dfd9023a8acd',
        'grant_type' => 'authorization_code',
        'code' => $_GET['code'],
        'scope' => 'openid',
        'redirect_uri' => '<http://localhost/tokenRequest>',
        'code_verifier' => $codeVerifier,
    ];
    
    $response = $client->request($method, $uri, ['form_params' => $options]);
    
    
    리디렉션 URL에 backend/app/Http/Controllers/TokenRequest.php이 지정되어 있기 때문에 이 파일에 승인 코드가 있는 상태에서 리디렉션합니다.
    토큰 엔드포인트에 인증 코드를 전송하여 ID Token을 획득합니다.
  • http://localhost/tokenRequest 사용할 프로세스를 지정합니다.이번에는 라이센스 코드 스트림이므로 지정grant_type
  • authorization_code

  • 생성용code_verifiercode_challenge
  • OAuth2.0 확장 사양 PKCE 구현 소개~Yahoo!아이디 연합해서 가져왔어요. - 야호!JAPAN Tech Blog
  • code_verifier는 43자 이상, 128자 이하의 문자열로 구성 문자는 [A-Z]/[a-z]/[0-9]/'-'/'이다.“_”/~이 되다.
    이번에 나타나지 않은 Resource Server 정보

  • [2탄] OAuth 2.0+OpenID Connect의 풀 스크랩 실사자 소견 - Qita
  • 클라이언트 애플리케이션에서 IDToken을 수신하고 IDToken
  • 을 검증한다.
  • 몇 가지 검증 방법이 있다
  • Securing Applications and Services Guide
  • 끝맺다
    다음 기사@Nyokki씨가 MySQL 관련 기사를 써준다고 합니다.
    @Nyokki 선생은 미광사 내에서 MySQL 학습회를 열었을 때 간단하고 알기 쉬워서 많은 것을 배웠다.그때 고마웠어요.🙏

    좋은 웹페이지 즐겨찾기