msal.js 重定向到 kubernetes 中的本地主机
msal.js redirects to localhost inside kubernetes
我有一个使用 Msal 2 的 NextJs 应用程序,用于通过 AzureAD 进行身份验证。
在本地工作或在本地的 dokcer-container 内部工作它工作得很好,因为容器端口 3000 直接转发到主机 3000。登录并重定向到 http://localhost:3000 是非-在那种情况下的问题。
现在我已经将它部署到一个 Kubernetes 集群到一个具有自签名证书和自定义域的 dev/staging 环境中,出现了一个问题:它仍然想重定向回 http://localhost:3000
,尽管 nginx 入口控制器指向 https://machine.domain.eu
当前系列事件是:
- 打开url
- 自动打开验证弹窗
- 弹出窗口重定向到
login.microsoftonline.com/...
- flow 尝试重定向回
http://localhost:3000/#code=xxxxxxx
应该发生的是:
- 重定向回
https://machine.domain.eu
当前的 msal 配置如下所示:
export const msalConfig = {
auth: {
clientId: "611c5aa6-f7de-4a06-ace7-xxxxxxxxxx",
authority: "https://login.microsoftonline.com/291d05b0-1020-4f36-aac5-xxxxxxxxxxx",
redirectUri: process.env.HOSTNAME || "http://localhost:3000", navigateToLoginRequestUrl: true
},
cache: {
cacheLocation: "localStorage", // This configures where your cache will be stored
storeAuthStateInCookie: false // Set this to "true" if you are having issues on IE11 or Edge
},
}
而 process.env.HOSTNAME
作为清单中的变量通过构建管道动态提供:
spec:
hostname: web-dev
containers:
- name: web
image: localhost:32000/web
env:
- name: NODE_TLS_REJECT_UNAUTHORIZED
value: "0"
- name: BASE_PATH
value: '/dev'
- name: HOSTNAME
value: 'https://machine.domain.eu'
ports:
- containerPort: 3000
是否有钩子或其他入口点来拦截此行为?
如果我从 AzureAD 中删除本地主机重定向 Uri,我什至没有走那么远,所以我现在怀疑 next.js 是在容器内 localhost:3000 上启动的罪魁祸首。
在我的 kubernetes 环境中失败的原因并不单一。
首先,我设置了 navigateToLoginRequestUrl: true
,这意味着,如果应用程序在 localhost:3000
内部启动,它会在响应通过时重定向到这个确切的 url。
这也意味着,将任何值设置为 redirectUri
都没有效果。
失败的第二个原因实际上是我的 k8s 部署清单,它指定了要拉取的图像,但没有指定哪个版本。将其显式设置为 :latest
后,我对代码的更改立即生效。
让我走上这条路的原因是调查 pods:
microk8s kubetl get pods
microk8s kubectl describe pod web-xxxx-xxxxxxx
在这里我看到了一张带有 SHA 摘要的图片,喜欢 registry/web@sha256-xxxxxx
我将此值与 web
和 docker images --digest
的最新图像进行了比较。在这里我看到,用 latest
标记的图像有不同的摘要 sha256-yyyyyy
外卖:
- 如果响应url与requestUrl不同,设置
navigateToLoginRequestUrl
为false
- 请确保,您认为构建容器的图像实际上是您认为的图像。
我有一个使用 Msal 2 的 NextJs 应用程序,用于通过 AzureAD 进行身份验证。
在本地工作或在本地的 dokcer-container 内部工作它工作得很好,因为容器端口 3000 直接转发到主机 3000。登录并重定向到 http://localhost:3000 是非-在那种情况下的问题。
现在我已经将它部署到一个 Kubernetes 集群到一个具有自签名证书和自定义域的 dev/staging 环境中,出现了一个问题:它仍然想重定向回 http://localhost:3000
,尽管 nginx 入口控制器指向 https://machine.domain.eu
当前系列事件是:
- 打开url
- 自动打开验证弹窗
- 弹出窗口重定向到
login.microsoftonline.com/...
- flow 尝试重定向回
http://localhost:3000/#code=xxxxxxx
应该发生的是:
- 重定向回
https://machine.domain.eu
当前的 msal 配置如下所示:
export const msalConfig = {
auth: {
clientId: "611c5aa6-f7de-4a06-ace7-xxxxxxxxxx",
authority: "https://login.microsoftonline.com/291d05b0-1020-4f36-aac5-xxxxxxxxxxx",
redirectUri: process.env.HOSTNAME || "http://localhost:3000", navigateToLoginRequestUrl: true
},
cache: {
cacheLocation: "localStorage", // This configures where your cache will be stored
storeAuthStateInCookie: false // Set this to "true" if you are having issues on IE11 or Edge
},
}
而 process.env.HOSTNAME
作为清单中的变量通过构建管道动态提供:
spec:
hostname: web-dev
containers:
- name: web
image: localhost:32000/web
env:
- name: NODE_TLS_REJECT_UNAUTHORIZED
value: "0"
- name: BASE_PATH
value: '/dev'
- name: HOSTNAME
value: 'https://machine.domain.eu'
ports:
- containerPort: 3000
是否有钩子或其他入口点来拦截此行为? 如果我从 AzureAD 中删除本地主机重定向 Uri,我什至没有走那么远,所以我现在怀疑 next.js 是在容器内 localhost:3000 上启动的罪魁祸首。
在我的 kubernetes 环境中失败的原因并不单一。
首先,我设置了 navigateToLoginRequestUrl: true
,这意味着,如果应用程序在 localhost:3000
内部启动,它会在响应通过时重定向到这个确切的 url。
这也意味着,将任何值设置为 redirectUri
都没有效果。
失败的第二个原因实际上是我的 k8s 部署清单,它指定了要拉取的图像,但没有指定哪个版本。将其显式设置为 :latest
后,我对代码的更改立即生效。
让我走上这条路的原因是调查 pods:
microk8s kubetl get pods
microk8s kubectl describe pod web-xxxx-xxxxxxx
在这里我看到了一张带有 SHA 摘要的图片,喜欢 registry/web@sha256-xxxxxx
我将此值与 web
和 docker images --digest
的最新图像进行了比较。在这里我看到,用 latest
标记的图像有不同的摘要 sha256-yyyyyy
外卖:
- 如果响应url与requestUrl不同,设置
navigateToLoginRequestUrl
为false
- 请确保,您认为构建容器的图像实际上是您认为的图像。