Elfsquad 认证库
认证库可以方便地认证Elfsquad API.
选项
clientId在您的整合页面中获取的 OpenIdClient 标识符 精灵管理系统。 。 。 .redirectUri您的应用程序的回调输入点 .scope(可选)请求认证范围. 默认为Elfskot.Api offline_access。 。 。 .loginUrl(可选)认证服务的URL. 默认为https://login.elfsquad.io。 。 。 .responseMode(可选) OAuth 响应模式, 也可以'fragment'或者说'query'默认为'fragment'。 。 。 .storeRefreshToken(可选)召回存储刷新令牌服务器侧. 当提供时,库会调用此词,而不是将符号保存到localStorage。必须同时提供refreshAccessToken财务报告和审定财务报表revokeRefreshToken。 。 。 .refreshAccessToken(可选的) 回调通过服务器端端点刷新访问令牌 。 提供后, 库会调用它, 而不是使用内置localStorage-基于新鲜流。 必须与storeRefreshToken财务报告和审定财务报表revokeRefreshToken。 。 。 .revokeRefreshToken(可选的) 回调以取消在签出时服务器侧刷新令牌 。 必须与storeRefreshToken财务报告和审定财务报表refreshAccessToken。 。 。 .
方法
signIn启动认证流程.onSignIn返回在认证流程成功运行后调用的承诺.isSignedIn返回带有布尔结果的保证,该结果表明用户是否被签名.getAccessToken返回解析为访问符的许诺.
实例
import { AuthenticationContext } from "@elfsquad/authentication";
var authenticationContext = new AuthenticationContext({
clientId: "c2a349a9-02ea-4e1e-a59d-65870529f713",
redirectUri: "https://example.com",
});
authenticationContext
.onSignIn()
.then(() => {
authenticationContext.getAccessToken().then((accessToken) => {
console.log("accessToken", accessToken);
});
})
.catch((error) => {
console.error(error);
});
authenticationContext.isSignedIn().then((isSignedIn) => {
if (!isSignedIn) {
authenticationContext.signIn();
}
});
BFF 模式( 安全刷新令牌存储)
使用 storeRefreshToken, (中文(简体) ), refreshAccessToken,以及 revokeRefreshToken 调用将刷新符移出 localStorage 进入服务器侧 HttpOnly Cookie,消除XSS曝光的长寿证书.
import { AuthenticationContext } from "@elfsquad/authentication";
const authenticationContext = new AuthenticationContext({
clientId: "c2a349a9-02ea-4e1e-a59d-65870529f713",
redirectUri: "https://example.com",
storeRefreshToken: (token) =>
fetch("/auth/store-token", {
method: "POST",
body: JSON.stringify({ token }),
}).then(() => {}),
refreshAccessToken: () => fetch("/auth/refresh").then((r) => r.json()),
revokeRefreshToken: () =>
fetch("/auth/revoke", { method: "POST" }).then(() => {}),
});
authenticationContext.onSignIn().then(() => {
authenticationContext.getAccessToken().then((accessToken) => {
console.log("accessToken", accessToken);
});
});