1

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

我们从反应应用程序调用服务如下 -

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}`})
4

2 回答 2

2

使用 fetch API,它通过添加凭据为我工作:'include'

提取(${authBase}/auth,{凭证:'包括'})

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

于 2020-03-25T12:16:46.907 回答
1

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

  1. 用户在操作系统上登录域帐户。
  2. 在浏览器中正确配置,请参阅Spring 文档

例如对于 Internet Explorer:

E.3 互联网浏览器

完成以下步骤以确保您的 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

如果您的操作系统和浏览器配置正确,这将触发服务票证生成,该浏览器将作为授权HTTP 标头值发送。

编辑: 如果您的应用程序分为分别托管在不同主机上的前端和后端,那么您必须为用户将输入的前端主机注册 SPN(并生成密钥表)。例子:

  • 后端:api.test.com
  • 前端:application.test.com

要使 SSO 工作,您必须注册 SPN:application.test.com,后端主​​机名在这里无关紧要。命令:

setspn -A HTTP/application.test.com@test.com ad_user_to_registern_spn_for 
于 2019-07-09T11:14:37.273 回答