小编典典

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

spring-boot

我们有一个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}`})

阅读 418

收藏
2020-05-30

共1个答案

小编典典

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

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

例如,对于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

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

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

For SSO to work, you have to register SPN: application.test.com, backend host
name is irrelevant here. Command:

setspn -A HTTP/application.test.com@test.com ad_user_to_registern_spn_for
2020-05-30