贡献新供应商
注意:本文档的主要受众是希望为新的 身份验证提供程序添加支持的主 > Backstage 项目的贡献者。 > 虽然你可以按照它来实现自己的自定义提供程序,但它比使用我们的内置提供程序要高级得多。
验证如何进行?
Backstage应用程序可以使用各种外部身份验证提供程序进行身份验证。 外部提供程序使用一个AuthProviderRouteHandlers
该接口由四个方法组成,每个方法都由一个端点托管(默认情况下)/api/auth/[provider]/method
其中method
执行如下操作
/auth/[provider]/start -> Initiate a login from the web page
/auth/[provider]/handler/frame -> Handle a finished authentication operation
/auth/[provider]/refresh -> Refresh the validity of a login
/auth/[provider]/logout -> Log out a logged-in user
流程如下
1.用户尝试登录。 2.弹出窗口打开,指向 "auth "端点。 该端点进行初始准备,然后将用户重新定向到外部验证器,仍在弹出窗口内。 3.验证器验证用户,并将验证结果(成功或失败)返回给包装器端点("处理程序/框架")。 4. "处理程序/框架 "渲染的网页将向打开弹出窗口的网页发出适当的响应,弹出窗口关闭。 5.用户点击用户界面退出,网页请求注销用户。
实施自己的 Auth 封装器
任何认证包装器的核心接口都是AuthProviderRouteHandlers
该接口有四种方法,与最初章节中描述的 API 相对应。 任何 auth 封装器都必须实现该接口。
启动登录时,前台会弹出一个窗口,允许用户启动登录。 登录请求会发送到/start
端点,该端点由start
方法。
start
方法会重定向到外部认证提供程序,后者会对请求进行身份验证,并将请求重定向到/handler/frame
端点,由frameHandler
方法。
frameHandler
会返回一个 HTML 响应,其中包含一个脚本,该脚本会执行postMessage
前台窗口,其中包含请求结果。WebMessageResponse
类型是由postMessage
到前台。
ApostMessageResponse
效用函数封装了生成一 个postMessage
响应,以确保成功处理 CORS。express.Response
, aWebMessageResponse
和前台的 URL (appOrigin
)作为参数,并返回包含脚本和信息的 HTML 页面。
有一个OAuth2基于身份验证的提供商、OAuthAdapter该类实现了AuthProviderRouteHandlers
接口,而是要求您实现OAuthHandlers这要容易得多。
验证环境分离
的概念。env
是身份验证后端工作方式的核心,它使用一个env
查询参数,以确定运行应用程序的环境 (development
,staging
,production
每个运行时可同时支持多个环境,并根据env
参数。
OAuthEnvironmentHandler
是一个OAuthHandlers
的AuthProviderRouteHandlers
接口,同时支持多个env
s.
要实例化 OAuth 提供程序(相同但用于不同环境),请使用OAuthEnvironmentHandler.mapConfig
它是一个迭代配置对象的辅助工具,配置对象是环境到配置的映射。 请参阅现有的 OAuth 提供程序,了解如何使用它。
配置如下
development:
clientId: abc
clientSecret: secret
production:
clientId: xyz
clientSecret: supersecret
OAuthEnvironmentHandler.mapConfig(config, envConfig => ...)
调用将按顶层development
和production
键,并以envConfig
.
为方便起见AuthProviderFactory
是一个必须实现的工厂函数,它可以生成一个AuthProviderRouteHandlers
为某个提供商服务。
所有受支持的提供商都提供AuthProviderFactory
返回一个OAuthEnvironmentHandler
能够处理多个环境的身份验证。
Passport
我们选择了Passport作为我们的身份验证平台,因为它拥有一整套受支持的身份验证功能策略.
如何添加新策略提供者
快速指南
1.安装基于 passport-js 的提供程序包。
2.为提供程序创建新的文件夹结构。
3.实施提供商,必要时扩展合适的框架。
4.将提供程序添加到后端。