Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions es/deploy/authentication-setup.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -215,11 +215,13 @@ Selecciona el método de handshake que quieres configurar.
import { Request, Response } from 'express';

const TWO_WEEKS_IN_MS = 1000 * 60 * 60 * 24 * 7 * 2;
const DOCS_HOST = 'docs.example.com';

const signingKey = await jose.importPKCS8(process.env.MINTLIFY_PRIVATE_KEY, 'EdDSA');

export async function handleRequest(req: Request, res: Response) {
const user = {
host: DOCS_HOST, // Debe coincidir con la URL de tu documentación
expiresAt: Math.floor((Date.now() + TWO_WEEKS_IN_MS) / 1000), // vencimiento de la sesión de 2 semanas
groups: res.locals.user.groups,
apiPlaygroundInputs: {
Expand All @@ -234,7 +236,7 @@ Selecciona el método de handshake que quieres configurar.
.setExpirationTime('10 s') // vencimiento del JWT de 10 segundos
.sign(signingKey);

return res.redirect(`https://docs.foo.com/login/jwt-callback#${jwt}`);
return res.redirect(`https://${DOCS_HOST}/login/jwt-callback#${jwt}`);
}
```

Expand All @@ -246,11 +248,13 @@ Selecciona el método de handshake que quieres configurar.
from fastapi.responses import RedirectResponse

private_key = os.getenv(MINTLIFY_JWT_PEM_SECRET_NAME, '')
DOCS_HOST = 'docs.example.com'

@router.get('/auth')
async def return_mintlify_auth_status(current_user):
jwt_token = jwt.encode(
payload={
'host': DOCS_HOST, # Debe coincidir con la URL de tu documentación
'exp': int((datetime.now() + timedelta(seconds=10)).timestamp()), # vencimiento del JWT de 10 segundos
'expiresAt': int((datetime.now() + timedelta(weeks=2)).timestamp()), # vencimiento de la sesión de 2 semanas
'groups': ['admin'] if current_user.is_admin else [],
Expand All @@ -264,7 +268,7 @@ Selecciona el método de handshake que quieres configurar.
algorithm='EdDSA'
)

return RedirectResponse(url=f'https://docs.foo.com/login/jwt-callback#{jwt_token}', status_code=302)
return RedirectResponse(url=f'https://{DOCS_HOST}/login/jwt-callback#{jwt_token}', status_code=302)
```
</CodeGroup>

Expand Down Expand Up @@ -397,6 +401,7 @@ Cuando utilices autenticación OAuth o JWT, tu sistema devolverá datos de usuar
<CodeGroup>
```tsx Format
type User = {
host?: string;
expiresAt?: number;
groups?: string[];
content?: Record<string, any>;
Expand All @@ -412,6 +417,7 @@ Cuando utilices autenticación OAuth o JWT, tu sistema devolverá datos de usuar

```json Ejemplo
{
"host": "docs.example.com",
"expiresAt": 1735689600,
"groups": ["admin", "beta-users"],
"content": {
Expand All @@ -430,6 +436,10 @@ Cuando utilices autenticación OAuth o JWT, tu sistema devolverá datos de usuar
```
</CodeGroup>

<ParamField path="host" type="string">
**Requerido para la autenticación JWT.** El nombre de host del sitio de tu documentación. La cadena debe coincidir exactamente con el dominio donde despliegas tu documentación. Mintlify valida que el host del JWT coincida con el host que realiza la solicitud para evitar la reutilización de tokens en diferentes sitios.
</ParamField>

<ParamField path="expiresAt" type="number">
Momento de expiración de la sesión en segundos desde el epoch. Cuando la hora actual supera este valor, el usuario debe volver a autenticarse.

Expand Down
18 changes: 14 additions & 4 deletions fr/deploy/authentication-setup.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -215,11 +215,13 @@ Sélectionnez la méthode de poignée de main que vous souhaitez configurer.
import { Request, Response } from 'express';

const TWO_WEEKS_IN_MS = 1000 * 60 * 60 * 24 * 7 * 2;
const DOCS_HOST = 'docs.example.com';

const signingKey = await jose.importPKCS8(process.env.MINTLIFY_PRIVATE_KEY, 'EdDSA');

export async function handleRequest(req: Request, res: Response) {
const user = {
host: DOCS_HOST, // Doit correspondre à l'URL de votre documentation
expiresAt: Math.floor((Date.now() + TWO_WEEKS_IN_MS) / 1000), // expiration de session de 2 semaines
groups: res.locals.user.groups,
apiPlaygroundInputs: {
Expand All @@ -234,7 +236,7 @@ Sélectionnez la méthode de poignée de main que vous souhaitez configurer.
.setExpirationTime('10 s') // expiration du JWT de 10 secondes
.sign(signingKey);

return res.redirect(`https://docs.foo.com/login/jwt-callback#${jwt}`);
return res.redirect(`https://${DOCS_HOST}/login/jwt-callback#${jwt}`);
}
```

Expand All @@ -246,11 +248,13 @@ Sélectionnez la méthode de poignée de main que vous souhaitez configurer.
from fastapi.responses import RedirectResponse

private_key = os.getenv(MINTLIFY_JWT_PEM_SECRET_NAME, '')
DOCS_HOST = 'docs.example.com'

@router.get('/auth')
async def return_mintlify_auth_status(current_user):
jwt_token = jwt.encode(
payload={
'host': DOCS_HOST, # Doit correspondre à l'URL de votre documentation
'exp': int((datetime.now() + timedelta(seconds=10)).timestamp()), # expiration du JWT de 10 secondes
'expiresAt': int((datetime.now() + timedelta(weeks=2)).timestamp()), # expiration de session de 2 semaines
'groups': ['admin'] if current_user.is_admin else [],
Expand All @@ -264,7 +268,7 @@ Sélectionnez la méthode de poignée de main que vous souhaitez configurer.
algorithm='EdDSA'
)

return RedirectResponse(url=f'https://docs.foo.com/login/jwt-callback#{jwt_token}', status_code=302)
return RedirectResponse(url=f'https://{DOCS_HOST}/login/jwt-callback#{jwt_token}', status_code=302)
```
</CodeGroup>

Expand Down Expand Up @@ -397,6 +401,7 @@ Lorsque vous utilisez l’authentification OAuth ou JWT, votre système renvoie
<CodeGroup>
```tsx Format
type User = {
host?: string;
expiresAt?: number;
groups?: string[];
content?: Record<string, any>;
Expand All @@ -412,6 +417,7 @@ Lorsque vous utilisez l’authentification OAuth ou JWT, votre système renvoie

```json Example
{
"host": "docs.example.com",
"expiresAt": 1735689600,
"groups": ["admin", "beta-users"],
"content": {
Expand All @@ -430,10 +436,14 @@ Lorsque vous utilisez l’authentification OAuth ou JWT, votre système renvoie
```
</CodeGroup>

<ParamField path="host" type="string">
**Requis pour l'authentification JWT.** Le nom d'hôte de votre site de documentation. La chaîne doit correspondre exactement au domaine où vous déployez votre documentation. Mintlify vérifie que l'hôte du JWT correspond à l'hôte de la requête pour empêcher la réutilisation de jetons sur différents sites.
</ParamField>

<ParamField path="expiresAt" type="number">
Heure dexpiration de la session, en secondes depuis lépoque Unix. Lorsque lheure actuelle dépasse cette valeur, lutilisateur doit sauthentifier de nouveau.
Heure d'expiration de la session, en secondes depuis l'époque Unix. Lorsque l'heure actuelle dépasse cette valeur, l'utilisateur doit s'authentifier de nouveau.

<Warning>**Pour les JWT :** cela diffère de la revendication `exp` dun JWT, qui détermine le moment où un JWT est considéré comme invalide. Par mesure de sécurité, définissez la revendication `exp` du JWT sur une durée courte (10 secondes ou moins). Utilisez `expiresAt` pour la durée réelle de la session (de quelques heures à plusieurs semaines).</Warning>
<Warning>**Pour les JWT :** cela diffère de la revendication `exp` d'un JWT, qui détermine le moment où un JWT est considéré comme invalide. Par mesure de sécurité, définissez la revendication `exp` du JWT sur une durée courte (10 secondes ou moins). Utilisez `expiresAt` pour la durée réelle de la session (de quelques heures à plusieurs semaines).</Warning>
</ParamField>

<ParamField path="groups" type="string[]">
Expand Down
14 changes: 12 additions & 2 deletions zh/deploy/authentication-setup.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -215,11 +215,13 @@ keywords: ['authentication', 'auth', 'OAuth', 'JWT', 'password']
import { Request, Response } from 'express';

const TWO_WEEKS_IN_MS = 1000 * 60 * 60 * 24 * 7 * 2;
const DOCS_HOST = 'docs.example.com';

const signingKey = await jose.importPKCS8(process.env.MINTLIFY_PRIVATE_KEY, 'EdDSA');

export async function handleRequest(req: Request, res: Response) {
const user = {
host: DOCS_HOST, // 必须与你的文档 URL 匹配
expiresAt: Math.floor((Date.now() + TWO_WEEKS_IN_MS) / 1000), // 2 周会话过期时间
groups: res.locals.user.groups,
apiPlaygroundInputs: {
Expand All @@ -234,7 +236,7 @@ keywords: ['authentication', 'auth', 'OAuth', 'JWT', 'password']
.setExpirationTime('10 s') // JWT 10 秒后过期
.sign(signingKey);

return res.redirect(`https://docs.foo.com/login/jwt-callback#${jwt}`);
return res.redirect(`https://${DOCS_HOST}/login/jwt-callback#${jwt}`);
}
```

Expand All @@ -246,11 +248,13 @@ keywords: ['authentication', 'auth', 'OAuth', 'JWT', 'password']
from fastapi.responses import RedirectResponse

private_key = os.getenv(MINTLIFY_JWT_PEM_SECRET_NAME, '')
DOCS_HOST = 'docs.example.com'

@router.get('/auth')
async def return_mintlify_auth_status(current_user):
jwt_token = jwt.encode(
payload={
'host': DOCS_HOST, # 必须与你的文档 URL 匹配
'exp': int((datetime.now() + timedelta(seconds=10)).timestamp()), # JWT 10 秒后过期
'expiresAt': int((datetime.now() + timedelta(weeks=2)).timestamp()), # 2 周会话过期时间
'groups': ['admin'] if current_user.is_admin else [],
Expand All @@ -264,7 +268,7 @@ keywords: ['authentication', 'auth', 'OAuth', 'JWT', 'password']
algorithm='EdDSA'
)

return RedirectResponse(url=f'https://docs.foo.com/login/jwt-callback#{jwt_token}', status_code=302)
return RedirectResponse(url=f'https://{DOCS_HOST}/login/jwt-callback#{jwt_token}', status_code=302)
```
</CodeGroup>

Expand Down Expand Up @@ -397,6 +401,7 @@ groups: ["admin"]
<CodeGroup>
```tsx Format
type User = {
host?: string;
expiresAt?: number;
groups?: string[];
content?: Record<string, any>;
Expand All @@ -412,6 +417,7 @@ groups: ["admin"]

```json Example
{
"host": "docs.example.com",
"expiresAt": 1735689600,
"groups": ["admin", "beta-users"],
"content": {
Expand All @@ -430,6 +436,10 @@ groups: ["admin"]
```
</CodeGroup>

<ParamField path="host" type="string">
**JWT 认证必填。** 文档站点的主机名。该字符串必须与你部署文档的域名完全匹配。Mintlify 会验证 JWT 中的 host 与请求的 host 是否一致,以防止 token 在不同站点间被重复使用。
</ParamField>

<ParamField path="expiresAt" type="number">
会话过期时间,以自 epoch 起算的秒数表示。当当前时间超过该值时,用户必须重新完成认证。

Expand Down