Lingara Lingara 文档 学习指南 API 库 应用 构建 网页版
语言: 中文简体

身份验证

本页译自英文。如两者有出入,以英文页面为准。 阅读英文页面

你用一个 OAuth 客户端的客户端 ID 和客户端密钥来创建客户端,其余的都交给库处理。它从不向你索要访问令牌。

库为你做的事

  • 一次交换,共同使用。 第一个需要令牌的调用会用你的凭据换取一个令牌。如果多个调用同时开始,它们都会等待这同一次交换,而不是各自发起一次。
  • 缓存到快要过期为止。 令牌会一直被复用,直到它过期前 60 秒,然后在下一次调用时被替换。后台不会刷新任何东西,所以空闲的进程不会发出任何请求。
  • 遇到 401 重试一次。 如果 API 拒绝了某个令牌,库会丢弃它,获取一个新令牌,再把这次调用重复一次。第二次 401 会作为 API 错误抛出。
  • 有时限的交换。 得不到应答的令牌请求会在 30 秒后失败,因此缓慢的令牌端点不会拖住所有调用方。
  • 没有可泄露的东西。 客户端密钥和每一个访问令牌在日志、调试输出和错误消息中都显示为 [REDACTED]。

不需要令牌的操作(例如列出 API 版本)从不发送令牌,所以没有凭据创建的客户端也能调用它们。

把密钥留在你的服务器上

客户端密钥标识的是你的应用,而不是你的用户。请把它保存在服务器的配置或密钥存储中,绝不要把它随浏览器页面或移动应用一起发布出去。

代码示例语言

TypeScript

import { Lingara } from "@lingara/api";

const client = new Lingara({
  clientId: process.env.LINGARA_CLIENT_ID!,
  clientSecret: process.env.LINGARA_CLIENT_SECRET!,
});

Rust

use lingara::Client;

let client = Client::builder()
    .client_credentials(std::env::var("LINGARA_CLIENT_ID")?, std::env::var("LINGARA_CLIENT_SECRET")?)
    .build()?;

Go

import (
	"os"

	lingara "github.com/Spinning-Cat-Studios/lingara_api_clients/go"
)

client, err := lingara.New(
	lingara.WithClientCredentials(os.Getenv("LINGARA_CLIENT_ID"), os.Getenv("LINGARA_CLIENT_SECRET")),
)
if err != nil {
	return nil, err
}

Java

import com.getlingara.client.LingaraClient;

LingaraClient client =
    LingaraClient.builder()
        .clientCredentials(
            System.getenv("LINGARA_CLIENT_ID"), System.getenv("LINGARA_CLIENT_SECRET"))
        .build();

Kotlin

import com.getlingara.kotlin.LingaraClient

val client =
    LingaraClient {
        clientCredentials(System.getenv("LINGARA_CLIENT_ID"), System.getenv("LINGARA_CLIENT_SECRET"))
    }

Ruby

require "lingara"

client = Lingara::Client.new(client_id: client_id, client_secret: client_secret)

PHP

use Lingara\Client;

$client = new Client(clientId: $clientId, clientSecret: $clientSecret);

本页封装的内容