2

我们在使用 Azure Active Directory/ServiceStack 后端授权我们的前端 React/Typescript 应用程序时遇到了一些问题。据我们所知,问题源于前端和后端位于不同的 URL 上。

在后端,我们使用此插件 https://github.com/jfoshee/ServiceStack.Authentication.Aad将 AAD 与 ServiceStack 集成。前端是一个用 Typescript 编写的 React 应用程序,@servicestack/client客户端用于与 API 交互。

当 API 重定向回应用程序时,在通过 Azure Active Directory 进行身份验证后,它会设置一些 cookie,包括ss-idss-pid. 问题似乎是这些cookie仅设置在API url上,而不是App。因此,每当从应用程序发送任何 API 请求时,请求中都不会包含 cookie,并且请求会遇到 401。

我们对流程的理解如下:

Redirect user to exampleapi.com/auth/aad
from exampleapp.com

exampleapi.com/auth/aad sets some cookies,
then redirects to Azure Active Directory (login.microsoftonline.com)

User completes login with AAD, is redirected back to
exampleapi.com/auth/aad with some data in the URL.

exampleapi.com/auth/aad sets cookies ss-id, ss-pid etc.
then redirects user back to exampleapp.com

我们尝试手动暂停应用程序,并将授权过程中从标头中提取的 cookie 注入到exampleapp.com. 即使这样,由 发出的 API 请求exampleapp.com似乎也不包含这些 cookie,因此会收到 401。我们正在使用 ServiceStack 的工具为前端生成 TypeScript DTO。

我们尝试发出的请求的一个简单示例,但收到 401:

const client: JsonServiceClient = new JsonServiceClient("exampleapi.com");

const userDetailsRequest: UserDetailsRequest = new UserDetailsRequest();

userDetailsRequest.userId = 123;

client.get(userDetailsRequest).then((userDetails) => {
    console.log(userDetails);
});

我们缺少什么?为什么不exampleapp.com使用 cookie 发送请求?我们如何正确设置 cookie,exampleapp.com以便它们可以在第一时间发送?

这是否可能,或者 ServiceStack 和 Active Directory 的组合是否需要应用程序和 API 在同一个域中?

4

0 回答 0