默认会加上安全验证,要加上方法级认证,请加上@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)注解;