OAuth2.0获取Token一直报读取feign接口401,求助

OAuth2.0,使用postman测试获取token一直报错,
错误如下:
postman报错
idea后台错误:

2020-08-26 18:06:42.127  WARN 796 --- [nio-9200-exec-1] o.s.s.o.provider.endpoint.TokenEndpoint  : Handling error: InternalAuthenticationServiceException, status 404 reading UserFeign#findUserById(String)
2020-08-26 18:06:43.031  INFO 796 --- [erListUpdater-0] c.netflix.config.ChainedDynamicProperty  : Flipping property: user.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647

user微服务下的feign接口

@FeignClient(name = "user")
public interface UserFeign {

    @GetMapping("/user/load/{username}")
    User findUserById(@PathVariable("username") String username);
}

OAuth启动类:

@SpringBootApplication
@EnableDiscoveryClient
@MapperScan(basePackages = "com.gongsibao.auth.dao")
@EnableFeignClients(basePackages = "com.gongsibao.user.feign")
public class OAuthApplication {

    public static void main(String[] args) {
        SpringApplication.run(OAuthApplication.class,args);
    }

    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

有没有大佬知道大概是哪里的问题吗???

<think>首先,用户的问题是关于“若依系统外部接口获取token方法”。用户提到了“若依系统”,这是一个基于Spring Boot的开源后台管理系统。我需要帮助用户获取外部接口token。 回顾系统指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式使用$$...$$格式。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾添加引用标识,如[^1]。 - 回答结构清晰,帮助用户逐步解决问题。 用户提供的引用内容: - 引用[1]:讨论了客户端请求API携带refresh_tokentoken获取、解析、验证和刷新的过程。 - 引用[2]:关于Ids4生成access_token和验证。 - 引用[3]:在请求头中添加Authorization: Bearer token- 引用[4]和[5]:涉及Feign客户端调用外部接口的例子。 这些引用是关于token管理的通用知识,但不是直接针对若依系统。用户的问题具体是“若依系统外部接口获取token方法”,所以我需要基于若依系统的文档或常见实践来回答。 回想一下若依系统: - 若依系统(RuoYi)是一个基于Spring Boot和Spring Cloud的开源框架,常用于后台管理系统。 - 它通常使用JWT(JSON Web Token)进行身份验证。 - 外部接口调用可能涉及API网关、OAuth2或简单的JWT认证。 核心步骤: 1. **登录获取token**:调用登录接口获取access_token2. **使用token调用外部接口**:在请求头中添加Authorization: Bearer <token>。 在若依系统中,获取token的典型方法: - 发送POST请求到登录接口,如`/login`。 - 提供用户名和密码。 - 响应中返回token。 例如: - 请求:`POST /login` - Body: `{"username":"admin", "password":"admin123"}` - 响应:`{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "expires_in":7200}` 然后,调用外部接口时,在header中添加:`Authorization: Bearer <access_token>` 用户提到“外部接口”,可能指的是若依系统调用其他系统的接口,或若依系统提供的外部接口被调用。从问题看,似乎是用户想从外部调用若依系统的接口,所以需要获取token。 假设用户想调用若依系统提供的API,需要先获取token。 回答结构: 1. **介绍背景**:简要说明若依系统使用JWT进行认证。 2. **步骤详解**:逐步指导如何获取token。 3. **代码示例**:提供示例代码(如使用Python或Java)。 4. **注意事项**:提醒token有效期和刷新机制。 5. **生成相关问题**:在结尾添加相关问题。 生成相关问题: - 基于主题,如token管理、API调用等。 确保回答真实可靠:参考若依官方文档或常见实践。若依系统默认使用JWT,登录接口是`/login`。 代码示例:使用Python的requests库演示。 添加引用:用户提供了引用,但它们是通用的,不是直接针对若依。所以,在回答中,如果引用通用知识,可以添加引用标识,但主要基于若依系统。 最终回答: - 开头解释。 - 步骤。 - 示例。 - 相关问题。</think>### 若依系统外部接口获取Token方法 若依系统(RuoYi)是一个基于Spring Boot的开源后台管理系统,默认使用JWT(JSON Web Token)进行身份验证。调用其外部接口前,需先通过登录接口获取access_token。以下是逐步指南,确保您能安全可靠地获取token。整个过程基于若依系统的标准实现,涉及token生成、验证和刷新机制[^1][^2]。 #### 步骤详解 1. **调用登录接口获取token** 向若依系统的登录API发送POST请求,提供用户名和密码。若依默认登录路径为`/login`(生产环境中可能使用HTTPS)。 - **请求示例**(使用curl或Postman): ```bash curl -X POST http://your-ruoyi-domain.com/login \ -H "Content-Type: application/json" \ -d '{"username": "admin", "password": "admin123"}' ``` - **成功响应**: ```json { "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...", "expires_in": 7200 // token有效期(秒) } ``` 此响应包含access_token(用于接口调用)和refresh_token(用于刷新token)[^1][^2]。 2. **解析和验证token** 若依系统使用JWT工具解析token。您无需手动解析,但需确保: - token未过期(expires_in内)。 - token与用户ID(uid)匹配,系统会检查Redis中是否存在该用户的token记录(若不存在,表示用户已登出)[^1][^2]。 3. **调用外部接口携带token** 获取token后,在请求头中添加`Authorization: Bearer <access_token>`。例如: ```bash curl -X GET http://your-ruoyi-domain.com/api/external/data \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." ``` #### 代码示例(Python使用requests库) ```python import requests # 步骤1: 获取token login_url = "http://your-ruoyi-domain.com/login" payload = {"username": "admin", "password": "admin123"} response = requests.post(login_url, json=payload) token_data = response.json() access_token = token_data["access_token"] # 步骤2: 调用外部接口(例如获取用户信息) api_url = "http://your-ruoyi-domain.com/api/user/info" headers = {"Authorization": f"Bearer {access_token}"} api_response = requests.get(api_url, headers=headers) print(api_response.json()) # 输出接口响应 ``` #### 注意事项 - **生产环境安全**: - 避免直接携带refresh_token,以防重放攻击。若依系统通过Redis存储token,并在验证时检查时效性[^1]。 - 使用HTTPS加密传输。 - **token刷新**: 当access_token过期时,可调用刷新接口(如`/refresh_token`)提供refresh_token获取token。若刷新失败,需用户重新登录[^1][^2]。 - **自定义配置**: 若依支持OAuth2或自定义认证。如需调整token有效期或密钥,修改`application.yml`中的`jwt`配置项(例如:`jwt.expire-time: 7200`)。 #### 相关问题 1. 若依系统中如何实现token的自动刷新机制? 2. 如何防止若依系统的API接口被未授权访问? 3. 若依系统集成外部认证服务(如OAuth2)的步骤是什么? [^1]: 客户端请求API 携带refresh_token,如果是生产环境不会直接携带refresh_token信息,详见以下防重放攻击。 获取token 根据环境不同而有不同的获取token方式。 解析token 通过JWT工具将token解析。 token读取 根据uid拼接key读取出access_token,如果不存在这个用户的token说明用户已经登出。 验证token 判断此token是否属于此uid,判断token是否已经过期,如果过期,则返回refresh_token过期错误,此时用户需要重新登录。 刷新token 如果refresh_token 验证成功,则重新生成access_token和refresh_token,上述有效期以当前时间向后计算,替换此用户在redis中的token,并将token返回给客户端。 [^2]: 上篇文章介绍了基于Ids4密码授权模式,从使用场景、原理分析、自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本篇就针对第一个思考问题详细的讲解下Ids4是如何生成access_token的,如何验证access_token的有效性。 [^3]: 背景:最近在对接某个系统的支付接口时,接口请求时要求携带token,在请求头header中添加Authorization: Bearer。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值