从Angular 2处理身份验证重定向

从Angular 2处理身份验证重定向,angular,http,authentication,redirect,cas,Angular,Http,Authentication,Redirect,Cas,我们有一个基于Angular2的web应用程序,它从安全的REST-API检索数据 在第一个REST-API请求时,它将返回一个带有重定向(302)响应的URL,用于启动GET请求。Angular 2不会自动重定向到此URL,请求失败。 请注意,对REST-API的登录已使用集中身份验证系统完成,此重定向不需要显示登录页面并从用户处获取输入。它只需要调用GET请求 我们如何启动对提供的重定向URL(来自HTTP:302响应)的GET请求并自动检索数据 如果我们从浏览器转到REST-API调用,它

我们有一个基于Angular2的web应用程序,它从安全的REST-API检索数据

在第一个REST-API请求时,它将返回一个带有重定向(302)响应的URL,用于启动GET请求。Angular 2不会自动重定向到此URL,请求失败。 请注意,对REST-API的登录已使用集中身份验证系统完成,此重定向不需要显示登录页面并从用户处获取输入。它只需要调用GET请求

我们如何启动对提供的重定向URL(来自HTTP:302响应)的GET请求并自动检索数据

如果我们从浏览器转到REST-API调用,它将自动重定向到给定的URL并返回数据

用于启动REST-API调用的角度源

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { Response, Headers, RequestOptionsArgs, URLSearchParams, RequestOptions } from '@angular/http';

this.http.get(url, options)
             .subscribe(
               (response: Response) => {
                 // handle response
               },
               (error: any) => {
                 //handle error
               }
             );
浏览器控制台错误

请求和响应

  • 更新

由于交叉源限制,我找到了解决方案。我通过使用相同的主机名访问所有内容来解决这个问题。

我目前面临着同样的问题,尽管原因不同。我有多个微服务,正在使用路由器,因此角度前端只需要了解该路由器。现在,当角度前端需要一个特定的微服务时,我只需要调用路由器,然后它返回一个重定向到正确的微服务。这样做的好处是前端只需要知道一个微服务,我可以自由添加、删除、重命名其他微服务

这确实意味着我的路由器微服务几乎可以返回307个响应。我在角度方面实现它的方法是只测试这个HTTP状态代码的响应。如果我得到一个307,我知道这是我的路由器重定向。然后我可以请求位置头并将请求重新发送到该位置

我想这对你来说也一样,只是测试你的响应是否有重定向HTTP状态码。如果您得到其中一个重定向代码,请从响应头中获取位置,然后将请求重新发送到该位置