默認會加上安全驗證,要加上方法級認證,請加上@EnableGlobalMethodSecurity註解 當你的日誌級別爲info時,默認密碼會打印到日誌上 SpringBootWebSecurityConfiguration主要用於web項目驗證; AuthenticationMangerConfiguration主要用於非web項目;git
建立認證服務器,須要使用@EnableAuthorizationServer註解還須要提供security.oauth2.client.client-id和security.oauth2.client.client-secret屬性;客戶端將被註冊到緩存倉庫中;github
這麼作意味着你有能力使用客戶端憑證來建立訪問令牌web
基本的客戶端終點憑證都是客戶端id和客戶端密碼;用戶憑證和正常的spring security相同;spring
你可使用AuthorizationServerConfigurer類的@Bean註解來實現自配置;api
要使用訪問令牌(access Token)你須要一個資源訪問器(可能和認證服務器相同).搭建很容易,只須要添加 @EnableResourceServer註解和提供令牌解碼的一些配置便可;若是你的應用也是一個認證服務器且能夠解密token,那麼你不須要作任何其餘事情;假如你的應用是一個單獨的服務,你須要作一些額外的配置,選擇以下:緩存
security.oauth2.resource.user-info-uri to use the /me resource (e.g. uaa.run.pivotal.io/userinfo on PWS) security.oauth2.resource.token-info-uri to use the token decoding endpoint (e.g. uaa.run.pivotal.io/check_token on PWS).
user-info-uri和token-info-uri同時定義,你須要指定優先級;prefer-token-info=ture是默認優先級; 另外,這些令牌若是是JWT,你能夠配置security.oauth2.resource.jwt.key-value在本地解碼他們; 驗證私鑰的值多是對應的私鑰,也多是PEM編碼的RSA公鑰;若是你沒有的該密鑰且他是公開的,你能夠提供一個 url下載他們,屬性爲:security.oauth2.resource.jwt.key-uri; 提示:假如你在認證服務器程序啓動時使用了security.oauth2.resource.jwt.key-uri;若是他找不到key,他會提示你如何修復這個警告;安全
user信息的令牌類型 谷歌,一些其餘的第三方驗證提供商,對於令牌類型名稱(他們會在請求頭中發送到用戶信息終端)很是嚴格. 默認的令牌類型是"Bearer",它兼容大部分廠商;你能夠經過修改"security.oauth2.resource.token-type"來修改令牌類型服務器
若是你有一個user-info-uri屬性,那這個資源服務器特性會使用"OAuth2RestTemplate"來關聯抓取相關用戶信息. 他提供一個完整的bean,其id爲"userInfoRestTemplate",不過你不必知道如何用它;默認配置能夠解決大部分問題,不過有時候你須要增長額外的攔截器,或者替換請求認證器.你能夠經過一個建立一個UserInfoRestTemplateCunstomizer類的bean來;他有個單獨的方法,在bean建立未初始化時調用;這個rest Template只有在輸出認證關聯信息時才被調用; 在yaml文件中設置RSA key,用豎線("|")來分割 其格式以下:併發
security: oauth2: resource: jwt: keyValue: | -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC... -----END PUBLIC KEY-----
你能夠經過@EnableOAuth2Client和添加一個OAuth2RestTemplate的@Autowire註解來實現;它能夠security.oauth2.client.*做爲憑證;和在服務端配置的相同,但它須要知道認證服務器的認證和令牌的urls; application.yamlapp
security: oauth2: client: clientId: bd1c0a783ccdd1c9b9e4 clientSecret: 1a9030fbca47a5b2c28e92f19050bb77824b5ad1 accessTokenUri: https://github.com/login/oauth/access_token userAuthorizationUri: https://github.com/login/oauth/authorize clientAuthenticationScheme: form
在這種配置的應用中,當咱們要使用OAuth2RestTemplate時,它會自動重定向至Github網站進行認證; 若是你早已在github網站上註冊了,那你就甚至不會發現它已經被受權了.這些具體的憑證只有當你的項目在8080端口上工做時才起做用(你能夠靈活的選擇將你的本身的客戶端app註冊在Github或其餘供應商);
你能夠設置令牌的做用域,經過yaml文件裏的security.oauth2.client.scope屬性.一般scope是空的,它取決於Authorization Server(即取決於客戶端註冊時的設置);
注:你還能夠設置security.oauth2.client.client-authentication-scheme屬性;該屬性默認是header,但一些廠商不喜歡header,因此你能夠改成form;實際上,security.aouth2.client.*屬性取決於你本身配置的AuthorizationCodeResourceDetail的實例
提示:在非web應用中,你仍可使用@Autowire和@OAuth2RestOperations註解;它仍會注入securtiy.oauth2.client.*配置.在這種狀況(你要使用它),它將是一個你炫耀請求的"客戶端憑證令牌授予";
你不須要使用@EnableOauth2Client或者@EnableOAuth2Sso.要關閉它,只須要將security.oauth2.client.client-id屬性從配置文件中清除便可;
一個OAuth2客戶端能夠用於從供應廠商那裏(這些特性是可得到的)抓取用戶明細並將這些信息封裝爲spring安全的權限令牌.資源服務器經過user-info-uri屬性(以單點登陸協議(Single Sign On(SSO)))支持該功能,spring boot經過提供@EnableOAuth2Sso註解使其變得特別容易.因爲上面提到的Github客戶端已經加了相關的註解和聲明,它就可使用"/user/"終點來保護他的資源和受權;
application.yml
security: oauth2: ... resource: userInfoUri:https://api.github.com/user preferTokenInfo:false;
因爲全部的路徑都被保護,全部沒有home頁面可供展現給未受權的用戶;訪問"/login"路徑登錄或者經過"security.oauth2.sso.login-path"來定製登錄路徑; 咱們也能夠定製本身的要保護的訪問規則或路徑,這樣咱們就能夠添加歡迎頁面了,前提:你經過在WebSecurityConfigurerAdapter類上添加@EnableOAuth2Sso,這個註解可使該類獲得裝飾和加強,而且可使默認的"/login"路徑起做用;例如,咱們能夠簡化未收取路徑爲"/",這樣咱們還能夠保持其餘設置爲默認;
@Configuration public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { @Override public void init(WebSecurity web) { web.ignore("/"); } @Override protected void configure(HttpSecurity http) throws Exception { http.antMatcher("/**").authorizeRequests().anyRequest().authenticated(); } }
若是執行器在應用中,你會發現: 1.管理端點都是安全的,即便應用端點是不安全的 2.安全事件均可以收集到審計事件中併發布到審計服務裏; 3.默認用戶同時擁有user角色和admin角色 審計安全特性能夠能夠經過其餘屬性來改變(management.securtiy.*);
使用WebSecurityConfigurerAdapter進行重寫時:假如不想重寫access規則,則使用@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER);要重寫access規則,則使用@Order(ManagementServerProperties.ACCESS_OVERRIDE_ORDER)註解;