身份验证 Authentication

默认情况下,平台内的所有数据都是私有的。可以将公共角色配置为在不进行身份验证的情况下公开数据,也可以将访问令牌传递给 API 以访问私有数据。

访问令牌

有两种类型的令牌可用于在 Directus 中进行身份验证。

临时令牌 (JWT)登录 端点/突变返回。这些令牌的到期时间相对较短,因此是最安全的选择。令牌返回一个 refresh_token,可用于通过 刷新 端点/突变检索新的访问令牌。

静态令牌可以为每个平台用户设置,并且永不过期。它们不太安全,但对于服务器到服务器的通信非常有用。它们以纯文本形式保存在 directus_users.token 中。

获得访问令牌后,有两种方法可以将其传递给 API,通过 access_token 查询参数或在请求的授权标头中。

查询参数

?access_token=<token>

授权标头

Authorization: Bearer <token>

登陆

检索临时访问令牌和刷新令牌。

请求正文

email Required
要为其检索访问令牌的用户的电子邮件地址。

password Required
用户的密码。

otp
用户的一次性密码(如果启用了 )FA)。

mode
是在 JSON 响应中检索刷新令牌?还是在httpOnly secure Cookie 中检索刷新令牌。 jsoncookie。默认值为json

响应属性

access_token string
在后续请求中使用的临时访问令牌。

expires integer
访问令牌过期前多长时间。值以毫秒为单位。

refresh_token string
可用于通过 /auth/refresh 检索新访问令牌的令牌。注意:如果您在请求中使用 cookie 作为模式,则 JSON 中不会返回刷新令牌。

到期时间
可以通过 ACCESS_TOKEN_TTL 环境变量 配置令牌的过期时间。

REST API

POST /auth/login
POST /auth/login/:provider
json
{
  "email": "admin@example.com",
  "password": "d1r3ct5us"
}

GraphQL

POST /graphql/system
graphql
mutation {
 auth_login(email: "admin@example.com", password: "d1r3ctu5") {
  access_token
  refresh_token
 }
}

刷新

使用刷新令牌检索新的访问令牌。

请求正文

refresh_token
要使用的刷新令牌。如果通过 '/auth/login'在 Cookie 中拥有刷新令牌,则无需在此处提交。

mode
是否在 JSON 响应中或在 httpOnly secure cookie 中检索刷新令牌。 jsoncookie 之一。

Response Attributes

access_token string
在后续请求中使用的临时访问令牌。

expires integer
访问令牌将在多长时间内过期。值以毫秒为单位。

refresh_token string
可用于通过 /auth/refresh检索新访问令牌的令牌。注意:如果您在请求中使用cookie作为模式,则不会在 JSON 中返回刷新令牌。

REST API

POST /auth/refresh
json
{
  "refresh_token": "gmPd...8wuB"
}

GraphQL

POST /graphql/system
graphql
mutation {
 auth_refresh(refresh_token: "abc...def", mode: json) {
  access_token
  refresh_token
 }
}

登出

使刷新令牌无效,从而破坏用户的会话。

请求正文

refresh_token
要失效的刷新令牌。如果通过 '/auth/login'在 Cookie 中拥有刷新令牌,则无需在此处提交。

REST API

POST /auth/logout
json
{
  "refresh_token": "gmPd...8wuB"
}

GraphQL

POST /graphql/system
graphql
mutation {
 auth_logout(refresh_token: "gmPd...8wuB")
}

请求密码重置

请求将密码重置电子邮件发送给给定用户。

请求正文

email Required 您为其请求密码重置的用户的电子邮件地址。

reset_url 提供电子邮件中的链接将指向的自定义重置 URL。重置令牌将作为参数传递。

注意:您需要配置 PASSWORD_RESET_URL_ALLOW_LIST 环境变量才能启用此功能。

REST API

POST /auth/password/request
json
{
  "email": "admin@example.com"
}

GraphQL

POST /graphql/system
graphql
mutation {
 auth_password_request(email: "admin@example.com")
}

重置密码

请求密码重置终结点会发送一封电子邮件,其中包含指向管理应用(或自定义路由)的链接,而管理应用(或自定义路由)又使用此终结点来允许用户重置其密码。

请求正文

token Required 密码重置令牌,如请求终结点发送的电子邮件中提供的那样。

password Required 用户的新密码。

REST API

POST /auth/password/reset
json
{
  "token": "eyJh...KmUk",
  "password": "d1r3ctu5"
}

GraphQL

POST /graphql/system
graphql
mutation {
 auth_password_reset(token: "eyJh...KmUk", password: "d1r3ctu5")
}

列出身份验证提供者

列出所有已配置的身份验证提供程序。

配置身份验证提供程序
要了解有关设置身份验证提供程序的详细信息,请查看配置身份验证提供程序.

响应属性

data Array 配置的身份验证提供程序的数组。

disableDefault boolean 是否禁用默认身份验证提供程序。

GET /auth
json
{
  "data": [
    {
      "name": "GitHub",
      "driver": "oauth2",
      "icon": "github"
    },
    {
      "name": "Google",
      "driver": "openid",
      "icon": "google"
    },
    {
      "name": "Okta",
      "driver": "openid"
    }
  ],
  "disableDefault": false
}

使用单点登录提供程序登录

将重定向到配置的 SSO 提供程序以供用户登录。

GET /auth/login/:provider