Jira插件权限问题:非授权用户获取全部项目
问题分析与解决方案
核心问题在于你当前生成的JWT是以插件自身身份发起请求,而非模拟用户身份。Jira会基于插件的权限返回项目列表,而非当前用户的权限——哪怕你添加了sub字段,若插件未获得用户模拟权限,Jira会直接忽略该字段。
解决步骤
1. 给插件添加用户模拟权限
在你的插件atlassian-connect.json配置文件中,把impersonate权限加入scopes数组:
"scopes": [ "read:jira-work", "impersonate" ]
这个权限是让Jira认可插件代表用户发起请求的前提,只有配置后,sub字段才会被用于权限校验。
2. 生成包含用户上下文的正确JWT
检查你使用的atlassian_jwt库是否支持传入额外payload参数,若支持,将用户的accountId通过extra_payload传入encode_token方法:
jwt_token = atlassian_jwt.encode_token( "GET", url=data.baseUrl.strip("/") + "/rest/api/3/project/search", clientKey=data.key, sharedSecret=data.sharedSecret, extra_payload={"sub": "朋友的accountId"} )
如果库不支持extra_payload参数,需要手动构造JWT payload,确保包含以下核心字段:
iss: 插件的clientKeysub: 用户的accountIdqsh: 请求签名哈希(由请求方法、URL生成)iat: 签发时间exp: 过期时间
3. 验证请求头格式
发起API请求时,必须将JWT放在Authorization头中,格式如下:
Authorization: JWT {你的JWT令牌}
额外说明
- 你之前添加
sub无效的核心原因是插件未声明impersonate权限,Jira默认忽略该字段,仍以插件身份返回数据。 - 修改配置后需要重新上传插件,确保权限设置生效。
内容的提问来源于stack exchange,提问作者Kenan Džafić
相关产品推荐
相关产品推荐

