avatar

Imperial

Documentation Team Chat MIT License Continuous Integration Swift 6.0+

🔐 Vapor 的 OAuth 提供商的联合身份验证。

安装

使用 SPM 字符串轻松地在您的 Package.swift 文件中包含依赖项

.package(url: "https://github.com/vapor-community/Imperial.git", from: "2.0.0-beta.2")

然后将所需的提供商添加到您的目标的依赖项中

.product(name: "ImperialGitHub", package: "imperial")

概述

Imperial 是一项联合登录服务,允许您轻松地将您的 Vapor 应用程序与 OAuth 提供商集成,以处理您应用程序的身份验证。

开始使用

会话中间件

Imperial 依赖于 会话中间件 来保存状态和访问令牌。 在 configure.swift 中,或作为特定路由的路由组,添加会话中间件。 例如,要全局添加它

app.middleware.use(app.sessions.middleware)

路由注册

Imperial 使用环境变量来访问客户端 ID 和密钥,以与提供商进行身份验证。 有关它们应该是什么的详细信息,请参阅提供商特定的文档。

您需要向您的路由注册 OAuth 服务。 例如,要注册 GitHub 集成,请添加以下内容

try routes.oAuth(from: GitHub.self, authenticate: "github", callback: "gh-auth-complete") { req, token in
    print(token)
    return req.redirect(to: "/")
}

这会注册一个到 /github 的路由。 当您访问该路由时,Imperial 将使用 GitHub 服务触发 OAuth 流程。 回调路径是您创建应用程序时向 OAuth 提供商注册的路径。 当回调路由被 OAuth 提供商调用时,将触发完成处理程序。 访问令牌被传入并返回响应。

如果您只想重定向,而无需在回调中执行任何其他操作,则可以使用辅助方法 RoutesBuilder/oAuth(from:authenticate:authenticateCallback:callback:scope:redirect:),该方法接受重定向字符串

try router.oAuth(from: GitHub.self, authenticate: "github", callback: "gh-auth-complete", redirect: "/")

访问令牌和中间件

如果您想在路由中获取 access_token,则可以使用 Imperial 附带的 Request 类型的辅助方法

let token = try request.accessToken

现在您正在验证用户身份,您将需要保护某些路由以确保用户已通过身份验证。 您可以通过将 ImperialMiddleware 添加到路由器组(或者可能是您的中间件配置)来做到这一点

let protected = routes.grouped(ImperialMiddleware())

然后,将您受保护的路由添加到 protected

protected.get("me", use: me)

默认情况下,ImperialMiddleware 将其发现的错误传递给 ErrorMiddleware 以进行捕获,但是您可以使用重定向路径对其进行初始化,以便在用户未通过身份验证时跳转到该路径

let protected = routes.grouped(ImperialMiddleware(redirect: "/"))