在spring Boot 上使用后端,在angular上使用前端,在nginx上使用Web服务器。
当用户在进入网站时通过第三方服务选择授权方法时,他被重定向到该服务,在那里他输入他的登录名和密码,然后该服务为用户提供所请求的数据。此时,他必须被重定向回该网站,并且他应该在他的个人帐户中。
如何实现return_url,使用户正确出现在我的网站上,然后,从URL浏览器行,有可能读取由第三方服务提供的授权码,添加到我的redirect_url?
我在spring Boot 中做了这样一个控制器:
@RestController
@RequestMapping("/callback/")
public class ServiceReturnController {
@GetMapping(path = "service_return", produces = "text/plain")
public ResponseEntity<?> handleReturn(
@RequestParam(name = "code", required = false) String authCode,
@RequestParam(name = "error", required = false) String error,
@RequestParam(name = "error_description", required = false) String errorDescription
) {
StringJoiner joiner = new StringJoiner("\n\n");
if (StringUtils.hasText(error)) {
joiner.add("error=" + error);
}
if (StringUtils.hasText(errorDescription)) {
joiner.add("error_description=" + errorDescription);
}
if (joiner.length() != 0) {
joiner.add("No expected parameters received.");
return ResponseEntity.ok().body(joiner.toString());
}
return ResponseEntity.ok().build();
}
}
我这样设置retun_url:https://exampleMyApp.com/callback/service_return
我的配置nginx,这里是我的控制器在Spring Boot 的路线:
location /callback/{
proxy_pass http://exampleMyApp-API.ru:9089/callback/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 500m;
}
成功认证后,用户应该在我的网站的个人帐户中。但是为此,前端必须从URL中读取授权码,并发出另一个请求以获得访问令牌并使用它访问网站
网址:http://exampleMyApp.com/callback/service_return?code=eyJ2ZXIiOjEsInR5cCI6IkpXVCIsInNidCI6ImF1dGhvcml6&state=wvwwvw-wevwvw-wew
怎么做的?也许我有一些缺陷。建议如何重定向到网站,并在验证访问令牌后执行额外的请求。
1条答案
按热度按时间frebpwbc1#
您可以通过订阅
ActivatedRoute
来访问当前路由上的查询参数。使用params.get(<PARAM_NAME>)
,您可以获得参数字符串value或undefined。使用收到的代码和状态调用后端。在后端检查状态并将代码交换为访问令牌。
根据代码交换的结果向前端发送响应。
Angular代码: