machenggong1996
machenggong1996
原理大概就是 请求过来的时候先在 spring cloud gateway进行token验证,验证的时候去授权服务器的check_token接口进行token校验,如果成功就放行去访问资源服务器,失败就直接抛出401 http code不能继续向下访问资源服务器。网关作为第一道防御关卡保护资源服务
我的理解是 oidc 是授权服务器对客户端的一种安全保证 使用授权码模式登陆时返回id_token,所以现在的oidc提供者是项目自己在使用授权码模式登陆的时候生成id_token
以前使用过keyCloak ,但是觉得 可以自己实现
在项目分支dev/code_mode下 访问下面两个url http://localhost:8080/oauth/authorize?client_id=008fec3d-c125-409e-9f8d-ef7724ec21df&client_secret=222&redirect_uri=http://www.baidu.com&response_type=code http://localhost:8080/oauth/token?code=SNHo4K&grant_type=authorization_code&redirect_uri=http://www.baidu.com 这里使用的是授权码模式 访问成功后会得到json返回值 返回值里面包含 id_token 我觉得oidc是这样实现的,oidc的使用要伴随一种使用code的模式 这里使用授权码模式 CustomTokenEnhancer类下面是生成逻辑
{ "access_token":"045e6bc6-9e74-49c7-8e68-80a77d7403b0", "token_type":"bearer", "refresh_token":"02f156c9-34c7-41e7-b779-cc1c2e33f702", "expires_in":8639495, "scope":"read", "id_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOm51bGwsImF1ZCI6IjAwOGZlYzNkLWMxMjUtNDA5ZS05ZjhkLWVmNzcyNGVjMjFkZiIsInNjb3BlIjpbInJlYWQiXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwIiwiZXhwIjoxNTkyMDQwMzI4LCJpYXQiOjE1OTE5NTM5MjgsImF1dGhvcml0aWVzIjpbImFkbWluIiwicm9sZTEiLCJ1c2VyIl19.Dr3mhM4nd7spu3_9tEfUtRRCQJhr_oz5ipasVNvvDD9XWZBqs-RoYs5jKmFHRPsTAFM_jT_YvR_aYQL0wLg_sDgcUM7T6dUk2WockMaPekGnJAt2oS9xMbyXyjSd2sPFsX56rczQS7OLmKSb3mQBejtBn4nLm1MhlGY5WFD2eSA", "grantType":"authorization_code", "status":1 }