springboot2.0整合oauth2.0

总结之前看了很多网上大神的实例,例子也是引用大神的,谢谢了!!!

1、在做springboot2.0和oauth2.0整合的时候(密码模式),有个问题一直想不通,请求的url中有用户名密码:(http://localhost:8080/oauth/token?grant_type=password&client_id=client_2&client_secret=123456&username=user_1&password=123456)

而代码中没有密码,他怎么知道这个用户是否是正确操作的呢?,下图用户名和密码都是写死的,看不出来用户名密码是如何传递的,这个类 UserDetailsService   有方法 loadUserByUsername,如果是密码模式的时候,只有一个参数,打印出来发现是输入的用户名,那么密码呢?只通过用户名就能判断是正确的用户?(今天请教同事后才知道,密码模式其实只适用公司内部有多个系统,得提前知道用户名和密码,然后才能和前端输入的进行对比,用户名密码得提前存到库或者内存缓存等地方)

springboot2.0整合oauth2.0_第1张图片

2、由于请求token的时候,我们调用的是:http://xxx/oauth/token?grant_type=password&client_id=client_2&client_secret=123456&username=user_1&password=123456,

oauth/token  : 该方法不是我们自己写的,就看看该方法怎么接收密码的,为什么UserDetailsService  只有一个username,而没有密码,全局搜索后,在TokenEndpoint 中有oauth/token 方法,跟着源码看后,原来接收到参数后,她已经存放了,而UserDetailsService  中是从存放的对象中查询是否存在,如图:

springboot2.0整合oauth2.0_第2张图片

springboot2.0整合oauth2.0_第3张图片

 

二、授权码模式

授权码模式网上有很多,可以百度,这里说明两点:

2.1 :client_id  和 client_secret需求提前申请的,比如:用户访问a系统时候,想用微信登录,则a系统需要提前向微信申请client_id  和 client_secret,使系统支持微信登录。

2.2:认证授权成功后,比如:微信返回:

{
  "token_type": "aa",
  "expires_in": aa,
  "access_token": "aa",
  "refresh_token": "aa",
}

失效时间,token等是a系统和微信的token和失效时间,不是a系统的后端和前端的token,a系统和前端交互的token还是由a系统后端自己生成并且返回的,和微信无关。这里的微信返回token,失效时间是指:在失效时间内a系统和微信交互需要的token,通过该token,可以从微信中查询a系统需要的用户信息,如:图像,用户名,性别等

 

你可能感兴趣的:(springboot问题总结,oauth2.0)