postman 使用有效的JWT标记调用keycloak已验证的API

deikduxw  于 2022-11-07  发布在  Postman
关注(0)|答案(2)|浏览(186)

我已经创建了一个简单的Sping Boot 应用程序,我已经使用keycloak进行了验证。当我调用服务(http://localhost:8080/table1data)时,它会将我重定向到keycloak登录page,在那里我插入我的域用户名和密码,然后它会返回数据。现在一切都很顺利。
如果我的用户已经拥有相应领域的有效令牌,并且他希望使用正确的令牌访问相同的URL,则不应将用户重定向到keycloak登录page(这是有意义的,因为用户有有效的令牌)。我如何从我的spring Boot 应用程序中创建这个场景?i-e将令牌传递给spring Boot 服务,该服务从keycloak验证此令牌,而不是将我重定向到登录页面。

我的控制器代码

public class Table1Controller {

    @Autowired
    private ITable1Repository table1Repository;

    @GetMapping("/table1data")
    public List<Table1Entity> getAllTable1Data() {
        return table1Repository.findAll();
    }
}

PS:我已经使用 Postman 生成了令牌(附图片)

ryevplcw

ryevplcw1#

您需要在HTTP请求中添加一个Authorization请求,并将“Bearer my-sample-token”作为值,将令牌放在此处。

使用 Postman 的示例

在“授权”选项卡中,您需要选择类型“* 不记名令牌 ”,并在“ 令牌 *”字段中添加您的访问令牌。

它基本上翻译为“授权:Bearer your-token”头,而我通常使用 Inherit auth from parent 选项,所以如果您使用请求集合,您可以将令牌添加到集合本身,集合中的每个请求都可以获得它。
如果您使用的是keycloak测试服务器,则还可以考虑设置更长的访问令牌寿命,以避免必须如此频繁地获取一个令牌。

t9eec4r0

t9eec4r02#

下面是一个使用
org.springframework.http.ResponseEntity

@GetMapping(path="/table1data")
public ResponseEntity<List<Table1Entity>> getAllTable1Data(String bearer) {
    HttpHeaders responseHeaders = new HttpHeaders();
    responseHeaders.set("Authorization", "Bearer " + bearer);
    return new ResponseEntity<List<Table1Entity>>(service.findAll(), responseHeaders, HttpStatus.CREATED);
}

相关问题