如何将Windows身份验证(浏览器)从React应用程序传递到Spnego Kerberos Spring SSO?

时间:2019-06-13 05:01:41

标签: reactjs spring-boot spring-security spring-security-kerberos

我们有一个React应用程序,用于从Spring Boot Web服务获取数据。两者都部署在同一服务器(tomcat)中。但是我们只需要Kerberos身份验证即可从React应用程序进行Web服务调用。任何人都可以打开React应用程序,但是当它导航时,它将调用Webservcie获取数据。因此,如果我们将spring配置为支持spnego kerberos spring sso,浏览器是否有可能将登录的Windows凭据自动(从React应用程序运行,在浏览器上运行)传递给spring boot Web服务。

我们正在从React App调用服务,如下所示-

export const client = rest
  .wrap(mime, { registry: registry })
  .wrap(errorCode)
  .wrap(defaultRequest, {
    headers: {
      'Content-Type': 'application/json',
      'Accept': 'application/json'
    },
    method: 'GET'
  })



export const fetchPDSIs = (Id) =>
  APIHelpers.client(APIHelpers.buildPDSIReq(Id))
    .then(
      response => (response.entity || []).sort((a, b) => a.portalinstance.localeCompare(b.portalinstance))
      ,
      response => {
        global.msg.error(<div className='smallTextNotification'>`Fetching instances and portal for {Id} error: {response.status.code} -> {response.status.text}</div>)
        return []
      }
    )

export const buildPDSIReq = (Id) => ({path: `${serverAddr}/msd232/pdsiii/${Id}`})

2 个答案:

答案 0 :(得分:2)

使用提取API,它通过添加凭据'include'对我有用

fetch(${authBase}/auth,{凭据:'include'})

我知道这不是您正在使用的内容,但可能会帮助其他读者

答案 1 :(得分:0)

是的,可能是客户端的要求:

  1. 用户已登录操作系统上的域帐户。
  2. 浏览器中的正确配置,请参见Spring documentation

例如对于Internet Explorer:

  

E.3 Internet Explorer

     

完成以下步骤以确保您的Internet Explorer浏览器   已启用以执行Spnego身份验证。

Open Internet Explorer.
Click Tools > Intenet Options > Security tab.
In Local intranet section make sure your server is trusted by i.e. adding it into a list.

Kerberos身份验证由后端服务返回的HTTP标头触发:

WWW-Authenticate: Negotiate

如果操作系统和浏览器配置正确,将触发服务票证生成,该浏览器将以 Authorization HTTP标头值发送。