我试图使用调用一个需要授权的第三方端点,因此我需要执行一个授权代码授权流。
我理解我需要的流程,首先获取代码,然后将代码交换为JWT,最后使用JWT来执行安全调用。
对我来说没有意义的是,当我只使用没有UI的后端rest时,我应该如何设置一个重定向URI。通常,用户被重定向到登录页面,在该页面中,用户要么使用用户名/密码登录,要么使用第三方帐户登录(google/facebook.)
在大量的googling之后,所有的搜索都以指南结束,以保护我自己的端点,而不是从我的spring引导服务中访问一个安全端点。
编辑:值得一提的是,我只使用没有前端(或MVC)的后端,在@Partha的评论之后,我做了以下操作:
First,我添加了一个新的登录端点,当通过浏览器访问时(这不适用于swagger/postman),它应该将用户重定向到授权服务器:
@GetMapping
public void login(HttpServletResponse httpServletResponse) {
httpServletResponse.setHeader("Location", getAuthServerEndpoint());
httpServletResponse.setStatus(302);
}在这里,我构建了端点以获得所需的所有数据(client_id,redirect_uri.)所以看起来就像
现在它将我发送到auth Server的login页面,在我登录后,我希望它将我重定向到localhost/token (这是一个get请求,它将检索代码并执行post请求来获取jwt并保存它),但是我却收到了一个无效的重定向uri,我真的不确定这是来自我的实现还是服务器的问题
EDIT2:我犯了一个愚蠢的错误,没有在Auth中添加http://localhost:8080/token作为重定向url,因为我假设我不需要
发布于 2020-05-31 12:39:56
不太确定你是怎么做的。这里的想法是..。您的api服务器应该有一个get端点/login。在您的/login控制器中,您应该重定向到IDP (例如uri=http://localhost:8080/token ) (注意,它的重定向,而不是发出api请求)。因此,当您在浏览器中单击http://localhost:8080/login时,应该会看到它被重定向到IDP。现在输入您的凭据,IDP验证它并将其重定向回http://localhost:8080/token?code=XYZABC或类似的东西。您的/token API控制器代码应该从url读取代码。并对IDP进行调用(这是api调用,而不是重定向),以便根据您的作用域将代码交换为令牌( idToken / accessToken)。使用令牌,您应该能够访问受保护的资源。希望这有帮助
发布于 2020-05-31 09:11:13
https://stackoverflow.com/questions/62113277
复制相似问题