OAUTH 2.0은 산업 등급 라이센스 계약입니다. OAUTH 2.0은 2006 년에 생성 된 OAUTH 1.0에서 상속되었습니다. OAUTH 2.0은 개발자가 권한을 단순화하고 웹 애플리케이션, 데스크탑 응용 프로그램, 모바일 애플리케이션 및 임베디드 애플리케이션에 대한 특정 권한 부여 프로세스를 제공하도록 노력하고 있습니다.
OAUTH 2.0은 승인을위한 산업 표준 프로토콜입니다. OAUTH 2.0은 2006 년에 생성 된 원래 OAUTH 프로토콜에서 수행 된 작업을 대체합니다. OAUTH 2.0은 고객 개발자 단순성에 중점을 두면서 웹 애플리케이션, 데스크탑 응용 프로그램, 휴대 전화 및 거실 장치에 대한 특정 권한 부여 흐름을 제공합니다.
Oauth 2.0의 4 자
쉽게 이해하려면 일반적으로 사용되는 WeChat 로그인을 예로 들어 보겠습니다.
자원 소유자
WeChat에 해당하는 각 사용자가 WeChat에 설정 한 리소스 소유자, 개인 정보는 각 사용자에게 속하며 Tencent에 속하지 않습니다.
리소스 서버
리소스 서버는 일반적으로 사용자 기본 정보를 얻기 위해 WeChat의 인터페이스와 같은 사용자 데이터 (첨가, 삭제, 수정 및 검색)의 일부 작업에 대한 REST API입니다.
클라이언트 응용 프로그램
제 3 자 클라이언트는 다양한 WeChat 공개 계정에서 개발 한 응용 프로그램과 비교하여, 제 3 자 애플리케이션은 인증 서버에서 승인 한 후 리소스 서버의 나머지 API에 액세스하여 사용자 아바타, 성별, 지역 등과 같은 기본 정보를 얻을 수 있습니다.
인증 서버
제 3 자 클라이언트가 합법적인지 확인하기 위해 서버를 인증합니다. 합법적 인 경우, 고객에게 토큰을 발행하고 제 3자는 토큰을 사용하여 Resource Server의 API를 호출하십시오.
4 가지 권한 부여 방법 (Grant Type)
Anthorization_code
웹 서버 애플리케이션에 적용되는 인증 코드 유형. 모드는 다음과 같습니다. 클라이언트는 첫 번째 호출/oauth/supportize/를 사용자 인증 인터페이스를 입력하고 사용자 인증 후 코드를 반환하고 클라이언트는 코드 및 appSecret에 따라 액세스 토큰을 얻습니다.
암시 적은 유형을 단순화하며 인증 코드 유형보다 인증 코드를 얻는 단계가 적습니다. 클라이언트 응용 프로그램이 승인되면 인증 서버는 클라이언트의 URL에 액세스 토큰을 직접 배치합니다. 클라이언트는 URL을 구문 분석하여 토큰을 얻습니다. 이 방법은 실제로 안전하지 않으며 HTTPS 보안 채널을 사용하고 액세스 토큰의 유효성 시간을 단축하여 위험을 줄일 수 있습니다.
비밀번호
비밀번호 유형, 클라이언트 응용 프로그램은 사용자 이름과 비밀번호를 통해 액세스 토큰을 얻습니다. 리소스 서버, 인증 서버 및 클라이언트는 사용자의 사용자 이름과 비밀번호를 클라이언트 애플리케이션으로 직접 보내려고하기 때문에 리소스 서버, 인증 서버 및 클라이언트에 적합합니다. 클라이언트 응용 프로그램은 사용자가 전송 한 사용자 이름과 비밀번호를 통해 토큰을 얻은 다음 리소스 서버 리소스에 액세스합니다. 예를 들어, Alipay는 Taobao 사용자 이름 및 비밀번호로 직접 로그인 할 수 있으며 동일한 회사에 속해 있고 서로를 완전히 신뢰하기 때문입니다.
client_credentials
클라이언트 유형은 사용자 참여가 필요하지 않으며 다른 서비스간에 도킹하는 데 사용되는 방법입니다. 예를 들어, 자신이 개발 한 응용 프로그램은 SMS Verification Code Service 제공 업체의 서비스를 호출하고 MAP 서비스 제공 업체의 서비스에 전화하여 휴대 전화 메시지 푸시 서비스 제공 업체의 서비스를 호출해야합니다. 서비스를 호출 해야하는 경우 서비스 제공 업체가 제공 한 앱 ID 및 AppSecret를 직접 사용하여 토큰을 얻을 수 있습니다. 토큰을 얻은 후에는 서비스를 직접 호출 할 수 있습니다.
다른 개념
성취하다
때로는 자원 서버와 인증 서버가 두 가지 다른 응용 프로그램입니다. 때로는 자원 서버와 인증 서버가 동일한 응용 프로그램에 있습니다. 차이점은 리소스 서버가 토큰의 유효성을 확인 해야하는지 여부입니다. 전자는 확인해야하지만 후자는 그렇지 않습니다. 후자는 여기에서 구현됩니다.
응용 프로그램 보안 구성
@ConfigurationPublic 클래스 SecurityConfiguration은 WebsecurityConfigurerAdapter {@override Protected Void Configure (httpsecurity http)가 예외 {http.formlogin () 및 (). csrf () .AuthorizeRequests (). } @override public void configure (Websecurity Web)는 예외 {super.configure (web); } @override protected void configure (AuthenticationManagerBuilder Auth)는 예외를 {auth.inmemoryauthentication (). WithUser ( "lyt"). password ( "lyt"). 당국 ( "role_user"). withuser ( "admin"). } @bean @bean public authenticationManager authenticationManagerBean ()은 예외 {return super.authenticationManagerBean (); }}인증 서버 구성
@enableAuthorizationServer @configurationPublic Class AgwordeRizationSerizeRverConfiguration을 확장합니다. 승인자 러버 ConfigurerAdapter {@override public void configure (clientDetailsServiceConfiger Clients)는 {clients.inmemory (). .authorizedGrantTypes ( "userization_code", "password", "memplicit", "client_credentials");} @override public void configure (AuthorizationSeRerseverseCurityConfigurer Security)는 예외 {super.configure (Security); } @override public void configure (contrizationServerEndPointSconfigurer endpoints) 예외 {endPoints.authenticationManager (authenticaticManager); } @autowired @Qualifier ( "AuthenticationManagerBean") Private AuthenticationManager AuthenticationManager;}리소스 서버 구성
@enableglobalmethodsecurity (prepostenabled = true)@enabreresourceserver@configurationpublic class resourceserverconfiguration 확장 resourceserverconfigureradapter {@override public void configure (httpsecurity http) 예외 {http.antmatcher ( "/oauth2/api/*a*e). .AntMatchers (httpmethod.get, "/Read/**").access("#oauth2.hasscope('Read ')") .AntMatchers (httpmethod.post, "/write/**") }}리소스 서버 필터 주문 설정
Application.yml에서 필터 주문을 3으로 설정해야합니다. 특정 이유로 링크를 참조하십시오.
쿠키 충돌을 방지하십시오
인증 서버의 쿠키와 클라이언트와 쿠키 사이의 쿠키 사이의 오류를 피하기 위해 쿠키 이름을 수정하거나 ContextPath를 설정하는 것이 가장 좋습니다.
시험
Postman은 OAUTH 2.0 인증 방법을 제공합니다. 토큰을 얻고 HTTP 요청에 인증을 추가 한 다음 리소스 서버의 나머지 API를 요청할 수 있습니다.
클라이언트 정보
권한 부여
토큰을 얻었습니다
리소스 서버 API 액세스
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.