使用令牌进行身份验证
令牌(Tokens)本质上是一串随机字符串,与密码类似,在某些情况下可以提供一种简单的身份验证机制。然而,令牌的安全性取决于其保密程度,因此在大型部署中,其他身份验证方案可能提供更高的安全性。因此强烈建议改用其他的 NATS 身份验证机制之一。
要运行本示例中的代码,先使用以下命令启动服务器:
nats-server --auth mytoken
示例代码使用 localhost:4222,以便您可以在本地机器上启动服务器并进行测试。
使用 Token 建立连接
{% tabs %}
{% tab title="Go" %}
// 设置令牌
nc, err := nats.Connect("127.0.0.1", nats.Name("API Token Example"), nats.Token("mytoken"))
if err != nil {
log.Fatal(err)
}
defer nc.Close()
// 用连接做点事情
{% endtab %}
{% tab title="Java" %}
Options options = new Options.Builder()
.server("nats://demo.nats.io:4222")
.token("mytoken") // 设置令牌
.build();
Connection nc = Nats.connect(options);
// 用连接做点事情
nc.close();
{% endtab %}
{% tab title="JavaScript" %}
const nc = await connect({
port: ns.port,
token: "aToK3n",
});
{% endtab %}
{% tab title="Python" %}
nc = NATS()
await nc.connect(servers=["nats://demo.nats.io:4222"], token="mytoken")
# 用连接做点事情。
{% endtab %}
{% tab title="C#" %}
// dotnet add package NATS.Net
using NATS.Net;
using NATS.Client.Core;
await using var client = new NatsClient(new NatsOpts
{
Url = "127.0.0.1",
Name = "API Token Example",
AuthOpts = new NatsAuthOpts
{
Token = "mytoken"
}
});
{% endtab %}
{% tab title="Ruby" %}
NATS.start(token: "mytoken") do |nc|
puts "Connected using token"
end
{% endtab %}
{% tab title="C" %}
natsConnection *conn = NULL;
natsOptions *opts = NULL;
natsStatus s = NATS_OK;
s = natsOptions_Create(&opts);
if (s == NATS_OK)
s = natsOptions_SetToken(opts, "mytoken");
if (s == NATS_OK)
s = natsConnection_Connect(&conn, opts);
(...)
// 销毁已创建的对象
natsConnection_Destroy(conn);
natsOptions_Destroy(opts);
{% endtab %}
{% endtabs %}
写入 Token 到 URL 中
一些客户端库允许您通过以下格式将令牌作为服务器URL的一部分:
nats://token@server:port
你可以像普通 URL 那样进行连接。
{% tabs %}
{% tab title="Go" %}
// URL中包含令牌
nc, err := nats.Connect("mytoken@localhost")
if err != nil {
log.Fatal(err)
}
defer nc.Close()
// 用连接做点事情
{% endtab %}
{% tab title="Java" %}
Connection nc = Nats.connect("nats://mytoken@localhost:4222");//URL中包含令牌
// 用连接做点事情
nc.close();
{% endtab %}
{% tab title="JavaScript" %}
// JavaScript不支持在URL中使用令牌,请使用`token`选项
{% endtab %}
{% tab title="Python" %}
nc = NATS()
await nc.connect(servers=["nats://mytoken@demo.nats.io:4222"])
# 用连接做点事情。
{% endtab %}
{% tab title="C#" %}
// dotnet add package NATS.Net
using NATS.Net;
using NATS.Client.Core;
await using var client = new NatsClient(new NatsOpts
{
// .NET客户端不支持在URL中使用令牌
// 请改用Token选项。
AuthOpts = new NatsAuthOpts
{
Token = "mytoken"
}
});
{% endtab %}
{% tab title="Ruby" %}
NATS.start("mytoken@127.0.0.1:4222") do |nc|
puts "Connected using token!"
end
{% endtab %}
{% tab title="C" %}
natsConnection *conn = NULL;
natsOptions *opts = NULL;
natsStatus s = NATS_OK;
s = natsOptions_Create(&opts);
if (s == NATS_OK)
s = natsOptions_SetURL(opts, "nats://mytoken@127.0.0.1:4222");
if (s == NATS_OK)
s = natsConnection_Connect(&conn, opts);
(...)
// 销毁已创建的对象
natsConnection_Destroy(conn);
natsOptions_Destroy(opts);
{% endtab %}
{% endtabs %}