慕课笔记-SpringSecurityOauth开发APP认证框架1⽂章⽬录
1. 为什么需要开发App社交登陆?
如果⽤户通过⼀些应⽤如app来登陆,那么就没有session,
如果⼀定要⽤session开发,也是可以的,但是
开发繁琐。
安全性和客户体验差
有些前端技术不⽀持cookie,如⼩程序
因此当我们的访问者不是浏览器的时候,⽤另外⼀种⽅式来访问
⽤发令牌的⽅式来访问资源
2. Spring Security OAuth介绍
绿⾊是实现好的,要实现的是⾃定义的认证
在资源上添加filter,实现对资源的保护
3. 实现⼀个标准的OAuth2协议的Provider⾓⾊
前⾯的demo项⽬都是依赖browser项⽬,这⾥依赖app项⽬,修改pom⽂件
<dependency>
<groupId>com.imooc.security</groupId>
<artifactId>imooc-security-app</artifactId>
<version>${imooc.security.version}</version>
</dependency>
此时app项⽬是个空项⽬,直接启动。
报错1:提⽰没有成功失败处理器,copy browser中的处理器到app下⾯。
报错2:提⽰没有密码加密BEAN,把这个bean的配置放到公共的core项⽬中
之后再次启动,就没有报错了。
3.1 实现认证服务器:
新建⼀个类,只需要加上下⾯注解,就实现了⼀个认证服务器了,由于demo项⽬依赖于app项⽬
Configuration
@EnableAuthorizationServer
public class ImoocAuthorizationServerConfig
因此此时demo项⽬就是⼀个认证服务器了,就能提供OAuth的认证服务
授权码模式:
查看oauth协议->4.1,授权码模式需要的参数:
Code:必须为code
Clientid:哪个应⽤需要授权,服务商决定哪些第三⽅需要授权
哪⼀个应⽤在请求授权:即传⼊的client_id就知道是给百度还是mooc授权,这个clientid是服务器给分配的需要服务提供商系统中的哪个⽤户给你授权:即这⾥输⼊的⽤户名密码对应的⽤户
给什么类型的权限:通过scope的参数,这⾥的参数是服务提供商⾃定义的
这⾥有⽤户名与密码,最终会调⽤到userdetailservice来处理
@Component
@Transactional
public class DemoUserDetailsService implements UserDetailsService, SocialUserDetailsService { private Logger logger = Logger(getClass());
@Autowired
private PasswordEncoder passwordEncoder;
/*
* (non-Javadoc)
*
* @see org.userdetails.UserDetailsService#
* loadUserByUsername(java.lang.String)
*/
@Override
public UserDetails loadUserByUsername(String username)throws UsernameNotFoundException { //    logger.info("表单登录⽤户名:" + username);
//    Admin admin = adminRepository.findByUsername(username);
//    Urls();
//    return admin;
return buildUser(username);
}
@Override
public SocialUserDetails loadUserByUserId(String userId)throws UsernameNotFoundException {      logger.info("设计登录⽤户Id:"+ userId);
return buildUser(userId);
}
private SocialUserDetails buildUser(String userId){
// 根据⽤户名查⽤户信息
//根据查到的⽤户信息判断⽤户是否被冻结
String password = de("123456");
logger.info("数据库密码是:"+password);
安卓app开发用什么框架
return new SocialUser(userId, password,
true,true,true,true,
AuthorityUtilsmaSeparatedStringToAuthorityList("admin"));
}
}
这⾥的密码默认是123456.
登录后到403页⾯。
这是因为默认情况下,⽤户必须具有ROLE_USER的⾓⾊
AuthorityUtilsmaSeparatedStringToAuthorityList("admin,ROLE_USER"));
添加之后重新登陆
⽬前的client_id是每次服务提供商⾃动⽣成的,这⾥可以配置为⼀个固定的。
这个页⾯相当于qq/weixin扫码的页⾯。
此时相当于回到第三⽅应⽤的页⾯。
拿 着这个code来获取token

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。