package Ġcom . r 3 . ref app . client . auth Ċ Ċ import Ġcom . r 3 . ref app . client . auth . Constants . AUTHENT IC ATED _ ACCESS Ċ import Ġcom . r 3 . ref app . client . auth . Constants . PER MIT _ ALL _ ACCESS Ċ import Ġcom . r 3 . ref app . client . auth . Constants . PRO DU CTION _ PROFILE Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . beans . factory . annotation . Value Ċ import Ġorg . springframework . context . annotation . Bean Ċ import Ġorg . springframework . context . annotation . Configuration Ċ import Ġorg . springframework . context . annotation . Profile Ċ import Ġorg . springframework . core . io . Class Path Resource Ċ import Ġorg . springframework . security . authentication . Authentication Manager Ċ import Ġorg . springframework . security . core . user details . UserDetails Service Ċ import Ġorg . springframework . security . crypto . bcrypt . BC rypt Password Encoder Ċ import Ġorg . springframework . security . crypto . password . Password Encoder Ċ import Ġorg . springframework . security . oauth 2 . config . annotation . configur ers . Client Details Service Configurer Ċ import Ġorg . springframework . security . oauth 2 . config . annotation . web . configuration . Authorization Server Configurer Adapter Ċ import Ġorg . springframework . security . oauth 2 . config . annotation . web . configur ers . Authorization Server Endpoints Configurer Ċ import Ġorg . springframework . security . oauth 2 . config . annotation . web . configur ers . Authorization Server Security Configurer Ċ import Ġorg . springframework . security . oauth 2 . provider . Client Details Service Ċ import Ġorg . springframework . security . oauth 2 . provider . OAuth 2 Request Factory Ċ import Ġorg . springframework . security . oauth 2 . provider . endpoint . Token Endpoint Authentication Filter Ċ import Ġorg . springframework . security . oauth 2 . provider . token . Token Store Ċ import Ġorg . springframework . security . oauth 2 . provider . token . store . Jwt AccessToken Converter Ċ import Ġorg . springframework . security . oauth 2 . provider . token . store . Jwt Token Store Ċ import Ġorg . springframework . security . oauth 2 . provider . token . store . KeyStore Key Factory Ċ import Ġorg . springframework . web . cors . Cors Configuration Ċ import Ġorg . springframework . web . cors . Url Based Cors Configuration Source Ċ import Ġorg . springframework . web . filter . Cors Filter Ċ import Ġjavax . sql . DataSource ĊĊ Ċ /** Ċ Ġ* ĠAuthorization Ġserver Ġconfiguration , Ġconfig ures Ġall ĠSpring 's ĠOAuth 2 Server Ġbe ans . Ċ Ġ* Ċ Ġ*/ Ċ @ Configuration Ċ @ Profile ( PRO DU CTION _ PROFILE ) Ċ open Ġclass ĠAuthorization Server Config Ġ: ĠAuthorization Server Configurer Adapter () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfigur able Ġparameter Ġused Ġfor ĠOAuth 2 Ġtoken Ġscope Ġverification ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Value ("\ ${ auth . server . check - user - scopes }") ĊĠĠĠ Ġprivate Ġvar Ġcheck User Scopes : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfigur able Ġj ks Ġkeystore Ġpath Ġused Ġfor ĠJWT Ġtoken Ġsigning ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Value ("\ ${ auth . server . key - store - path }") ĊĠĠĠ Ġlateinit Ġvar Ġkey Store Path : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfigur able Ġj ks Ġkeystore Ġpass ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Value ("\ ${ auth . server . key - store - pass }") ĊĠĠĠ Ġlateinit Ġvar Ġkey Store Pass : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfigur able Ġj ks Ġkeystore Ġalias ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Value ("\ ${ auth . server . key - store - alias }") ĊĠĠĠ Ġlateinit Ġvar Ġkey Store Alias : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfigur able ĠCORS Ġallowed Ġendpoints ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Value ("\ ${ auth . server . cors . allowed - endpoints }") ĊĠĠĠ Ġlateinit Ġvar Ġcors Allowed Endpoints : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfigur able ĠCORS Ġallowed Ġorig ins ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Value ("\ ${ auth . server . cors . allowed - orig ins }") ĊĠĠĠ Ġlateinit Ġvar Ġcors Allowed Orig ins : ĠList < String > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfigur able ĠCORS Ġallowed Ġmethods ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Value ("\ ${ auth . server . cors . allowed - methods }") ĊĠĠĠ Ġlateinit Ġvar Ġcors Allowed Methods : ĠList < String > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfigur able ĠCORS Ġallowed Ġheaders ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Value ("\ ${ auth . server . cors . allowed - headers }") ĊĠĠĠ Ġlateinit Ġvar Ġcors Allowed Headers : ĠList < String > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfig ured Ġ[ Password Encoder ] Ġwhich Ġwill Ġbe Ġused Ġin Ġ[ Client Details Service ] Ġconfiguration ĊĠĠĠĠ Ġ* Ġ([ BC rypt Password Encoder ] Ġin Ġthis Ġcase ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġpassword Encoder : ĠPassword Encoder ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfig ured Ġ[ DataSource ] Ġwhich Ġwill Ġbe Ġused Ġin Ġ[ Client Details Service ] Ġconfiguration ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar ĠdataSource : ĠDataSource ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfig ured Ġ[ UserDetails Service ] Ġwhich Ġwill Ġbe Ġused Ġin Ġ[ Authentication Manager ] Ġconfiguration ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġ Ġuser Details Service : ĠUser Details Service ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfig ured Ġ[ Client Details Service ] Ġwhich Ġwill Ġbe Ġused Ġin Ġ[ OAuth 2 Request Factory ] Ġconfiguration ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġclient Details Service : ĠClient Details Service ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfig ured Ġ[ Authentication Manager ] Ġwhich Ġwill Ġbe Ġused Ġin Ġ[ Authorization Server Endpoints Configurer ] Ġconfiguration ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġauthentication Manager : ĠAuthentication Manager ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOAuth 2 Request Factory Ġbean Ġconfiguration , Ġprovides Ġ[ Custom Oauth 2 Request Factory ] Ġwith Ġtoken Ġstore Ġconfiguration . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Bean ĊĠĠĠ Ġopen Ġfun Ġrequest Factory (): ĠOAuth 2 Request Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Factory Ġ= ĠCustom Oauth 2 Request Factory ( client Details Service ) ĊĠĠĠĠĠĠĠ Ġrequest Factory . set Check User Scopes ( check User Scopes ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrequest Factory ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠToken Store Ġbean Ġconfiguration , Ġprovides Ġ[ Jwt Token Store ] Ġwith Ġ[ Jwt AccessToken Converter ] Ġin Ġorder Ġto Ġenable ĠJWT ĊĠĠĠĠ Ġ* Ġtokens . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Bean ĊĠĠĠ Ġopen Ġfun Ġtoken Store (): ĠToken Store Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠJwt Token Store ( jwt AccessToken Converter ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠJwt AccessToken Converter Ġbean Ġconfiguration , Ġuses Ġconfigured Ġj ks Ġto Ġsign ĠJWT Ġtokens . ĠConfig ured Ġ[ Custom Token Enh ancer ] ĊĠĠĠĠ Ġ* Ġis Ġused Ġto Ġadd Ġcustomer Id Ġinformation Ġto Ġdefault Ġtoken . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Bean ĊĠĠĠ Ġopen Ġfun Ġjwt AccessToken Converter (): ĠJwt AccessToken Converter Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconverter Ġ= ĠCustom Token Enh ancer () ĊĠĠĠĠĠĠĠ Ġconverter . set KeyPair ( KeyStore Key Factory ( Class Path Resource ( key Store Path ), Ġkey Store Pass . toCharArray ()). getKey Pair ( key Store Alias )) ĊĠĠĠĠĠĠĠ Ġreturn Ġconverter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Client Details Service Configurer ] Ġconfiguration , Ġuses Ġconfigured ĠJDBC Ġdatasource Ġ( h 2 Ġor Ġpostgres Ġbased Ġon Ġthe ĊĠĠĠĠ Ġ* Ġapplication . yml Ġconfig ) Ġas Ġclient Ġdetails Ġstorage , Ġ[ BC rypt Password Encoder ] Ġis Ġconfigured Ġfor Ġpassword Ġhashing . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġconfigure ( clients : ĠClient Details Service Configurer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclients . jdbc ( dataSource ). password Encoder ( password Encoder ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Token Endpoint Authentication Filter ] Ġconfiguration , Ġ[ authentication Manager ] Ġand ĊĠĠĠĠ Ġ* Ġ[ Custom Oauth 2 Request Factory ] Ġare Ġconfigured Ġas Ġauthentication Ġmanager Ġand Ġrequest Ġfactory . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Bean ĊĠĠĠ Ġopen Ġfun Ġtoken Endpoint Authentication Filter (): ĠToken Endpoint Authentication Filter Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠToken Endpoint Authentication Filter ( authentication Manager , Ġrequest Factory ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOAuth 2 Server Ġaccess Ġconfiguration , ĠOAuth 2 Server ĠCORS Ġconfiguration . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġconfigure ( oauth Server : ĠAuthorization Server Security Configurer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠUrl Based Cors Configuration Source () ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠC ors Configuration () ĊĠĠĠĠĠĠĠ Ġconfig . allowed Orig ins Ġ= Ġcors Allowed Orig ins ĊĠĠĠĠĠĠĠ Ġconfig . allowed Methods Ġ= Ġcors Allowed Methods ĊĠĠĠĠĠĠĠ Ġconfig . allowed Headers Ġ= Ġcors Allowed Headers ĊĠĠĠĠĠĠĠ Ġsource . register Cors Configuration ( cors Allowed Endpoints , Ġconfig ) ĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠC ors Filter ( source ) ĊĠĠĠĠĠĠĠ Ġoauth Server . add Token Endpoint Authentication Filter ( filter ) ĊĠĠĠĠĠĠĠ Ġoauth Server . token Key Access ( PER MIT _ ALL _ ACCESS ). check Token Access ( AUTHENT IC ATED _ ACCESS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAuthorization Server Endpoints Ġconfiguration , ĠJWT Ġtoken Ġen h ancer , ĠDB Ġ[ UserDetails Service ] Ġand Ġ[ Authentication Manager ] ĊĠĠĠĠ Ġ* Ġare Ġconfigured ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġconfigure ( endpoints : ĠAuthorization Server Endpoints Configurer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġendpoints . token Store ( token Store ()). token Enh ancer ( jwt AccessToken Converter ()). authentication Manager ( authentication Manager ). user Details Service ( user Details Service ) ĊĠĠĠĠĠĠĠ Ġif Ġ( check User Scopes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġendpoints . request Factory ( request Factory ()) ĊĠĠĠ Ġ} Ċ Ċ }