मैं वसंत सुरक्षा Oauth2 में बस एक शुरुआत कर रहा हूं। मैं प्राधिकरण सर्वर और संसाधन सर्वर (अलग और जेडीबीसी से कनेक्ट) बनाने का प्रयास करता हूं और इसका उद्देश्य एकल साइन-ऑन करना है। प्रमाणीकरण सर्वर से accesstoken और refreshtoken पाने के लिए मेरी प्रवाह सफलता। मेरा accesstoken हमेशा Resouce सर्वर तक पहुंचने के लिए पैरामीटर के रूप में उपयोग किया जाता है, और यह एक प्रतिक्रिया वापस दे रहा है।वसंत सुरक्षा Oauth2: समाप्त हो चुके हैंडलिंग को संभालने के लिए प्रवाह
for example http://127.0.0.1:8080/Resource/res/staff?access_token=xxxxxxxxxxxxxxxxxxxxx
मेरी समस्या, अगर accesstoken समाप्त हो गया है, वसंत सुरक्षा पृष्ठ तक पहुंचने और त्रुटि अपवाद देने से रोक देगा। जब मुझे नया टोकन प्राप्त करने के लिए रीफ्रेशटोकन का उपयोग करना चाहिए? या मेरा प्रवाह गलत है? क्या accesstoken नवीकरण करने के लिए कोई अन्य प्रवाह है?
धन्यवाद
संपादित:
FYI करें: मैं वसंत सुरक्षा OAuth2 को उपयोग करने एसएसओ बनाना चाहते हैं। मेरे पास कई ऐप्स सर्वर हैं (स्प्रिंग फ्रेमवर्क का उपयोग करें) और मैं एक सर्वर बनाना चाहता हूं जो लॉगिन प्रबंधित करने के लिए ज़िम्मेदार है। और मैं ऐप सर्वर को संसाधन सर्वर (क्लाइंट भी) बनना चाहता हूं तो मैं वसंत सुरक्षा Oauth2 के साथ एक प्राधिकरण सर्वर बना देता हूं। उपयोगकर्ता जो संरक्षित संसाधन सर्वर तक पहुंचना चाहता है उसे प्राधिकरण सर्वर (संसाधन सर्वर प्राधिकरण सर्वर को अधिकृत) में लॉगिन करना होगा। इसे एक कोड मिलेगा और फिर संसाधन सर्वर इस कोड को एक्सेस टोकन और रीफ्रेश टोकन के साथ एक्सचेंज करेगा। यह प्रवाह सफलता है।
मैं प्रमाणीकरण सर्वर द्वारा दिए गए रीफ्रेश टोकन का उपयोग करके नई पहुंच टोकन का भी अनुरोध कर सकता हूं। लेकिन मैं इस प्रक्रिया को कॉल नहीं कर सकता क्योंकि अगर मैं यूआरएल मानचित्रण तक पहुंचता हूं, तो पहले वसंत सुरक्षा पहुंच को अवरुद्ध कर रही थी और अमान्य टोकन त्रुटि रिटर्न दे रही थी।
मैं लापता लिंक को कैसे हल कर सकता हूं?
अपडेट किया गया:
यह मेरा प्राधिकरण सर्वर विन्यास है:
@Configuration
public class Oauth2AuthorizationServer {
@Configuration
@EnableAuthorizationServer
protected static class AuthorizationServerConfiguration extends
AuthorizationServerConfigurerAdapter {
@Autowired
@Qualifier("authenticationManagerBean")
private AuthenticationManager authenticationManager;
@Autowired
DataSource dataSource;
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints)
throws Exception {
endpoints
.tokenStore(new JdbcTokenStore(dataSource))
.authenticationManager(authenticationManager);
}
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
oauthServer.tokenKeyAccess("isAnonymous() || permitAll()").checkTokenAccess("permitAll()");
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients
.jdbc(dataSource);
}
}
}
और ये मेरे संसाधन सर्वर विन्यास (क्लाइंट के रूप में भी) (भी है
@Configuration
public class Oauth2ResourceServer {
private static final String RESOURCE_ID = "test";
@Configuration @Order(10)
protected static class NonOauthResources extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/api/halo").permitAll()
.antMatchers("/api/state/**").permitAll()
.antMatchers("/**").permitAll()
.and().anonymous();
}
}
@Configuration
@EnableResourceServer
protected static class ResourceServerConfiguration extends
ResourceServerConfigurerAdapter {
@Override
public void configure(ResourceServerSecurityConfigurer resources) {
RemoteTokenServices tokenService = new RemoteTokenServices();
tokenService.setClientId("jsclient");
tokenService.setClientSecret("jspasswd");
tokenService.setCheckTokenEndpointUrl("http://localhost:8084/Server2Auth/oauth/check_token");
resources
.resourceId(RESOURCE_ID)
.tokenServices(tokenService);
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.filterSecurityInterceptorOncePerRequest(true)
.antMatchers("/res/staff").hasRole("STAFF")
.antMatchers("/res/client").access("#oauth2.hasScope('trust')")
.antMatchers("/res/admin").hasRole("ADMIN")
.and()
.exceptionHandling().accessDeniedPage("/403");
}
}
}
संसाधन ग्राहक के रूप में) अधिकृत करने का अनुरोध:
अधिकृत सर्वर सेप्रतिक्रिया:
http://localhost:10001/resource-server/api/state/new?code=8OppiR
संसाधन (क्लाइंट) को प्राधिकृत करना कोड का आदान-प्रदान सर्वर: अधिकृत सर्वर से
curl -X POST -vu clientauthcode:123456 http://localhost:10000/auth-server/oauth/token -H "Accept: application/json" -d "grant_type=authorization_code&code=iMAtdP&redirect_uri=http://localhost:10001/resource-server/api/state/new"
प्रतिक्रिया:
{
"access_token":"08664d93-41e3-473c-b5d2-f2b30afe7053",
"token_type":"bearer",
"refresh_token":"436761f1-2f26-412b-ab0f-bbf2cd7459c4",
"expires_in":43199,
"scope":"write read"
}
संसाधन (के रूप में ग्राहक) यूआरएल स्वयं
तक पहुंचें ताज़ा का उपयोग करcurl http://localhost:10001/resource-server/api/admin?access_token=08664d93-41e3-473c-b5d2-f2b30afe7053
का अनुरोध नई पहुंच toke टोकन
curl -X POST -vu clientauthcode:123456 http://localhost:10000/auth-server/oauth/token -d "client_id=clientauthcode&grant_type=refresh_token&refresh_token=436761f1-2f26-412b-ab0f-bbf2cd7459c4"
असंबद्ध टिप्पणी: आपको एक शीर्षलेख में पहुंच टोकन रखना चाहिए (यह एक यूआरआई क्वेरी पैरामीटर के रूप में सुरक्षित नहीं है)। –
एक और असंबंधित टिप्पणी: आपको टोकन कुंजी एंडपॉइंट की आवश्यकता नहीं है, इसलिए इसे स्पर्श न करें; और चेक टोकन एंडपॉइंट को उत्पादन सर्वर में 'permitAll() 'के साथ प्रकट नहीं किया जाना चाहिए (' प्रमाणीकृत() 'कोशिश करें)। –
कुछ हद तक संबंधित टिप्पणी (क्योंकि यह सवाल भ्रामक बनाता है) आप यहां कोई एसएसओ नहीं कर रहे हैं। यह संसाधन सर्वर में टोकन-आधारित सुरक्षा के साथ क्लासिक ऑथ/संसाधन सर्वर है। –