Skip to content

一个基于 Discourse SSO (Single Sign-On) 用户系统的身份认证 OAuth Connect 系统。

License

Notifications You must be signed in to change notification settings

Tuluobo/discourse-connect

Repository files navigation

Discourse Connect

这是一个基于 Next.js 的项目,实现了使用 Discourse SSO (Single Sign-On) 用户系统的 OAuth 认证功能。

项目概述

本项目提供了一个 OAuth 认证系统,允许其他应用程序使用 Discourse 论坛的用户账号进行身份验证。这样可以让用户使用他们已有的 Discourse 账号登录到您的应用程序,无需创建新的账号。

主要特性:

  • 基于 Discourse SSO 的用户认证
  • OAuth 2.0 协议支持
  • 使用 Next.js 框架构建,提供良好的性能和开发体验

开始使用

首先,运行开发服务器:

pnpm dev
#
pnpm turbo

在浏览器中打开 http://localhost:3000 查看结果。

您可以通过修改 app/page.tsx 来开始编辑页面。当您编辑文件时,页面会自动更新。

配置

要使用此 OAuth 系统,您需要进行以下配置:

  1. 在您的 Discourse 论坛中启用 SSO 功能。
  2. 设置环境变量:
    • NEXT_PUBLIC_HOST_URL: 应用程序的主机 URL(不要在末尾添加 "/")
    • DATABASE_URL: 数据库连接字符串
    • AUTH_SECRET: Next Auth 的密钥
    • DISCOURSE_HOST: 您的 Discourse 论坛 URL
    • DISCOURSE_SECRET: 在 Discourse 中设置的 SSO secret

部署

使用 Docker 部署

本项目支持使用 Docker 进行部署。以下是使用 Docker Compose 部署的步骤:

  1. 确保您的系统已安装 Docker 和 Docker Compose。

  2. 在项目根目录下,运行以下命令启动服务:

    docker-compose up -d

    这将构建并启动 Web 应用和 PostgreSQL 数据库服务。

  3. 应用将在 http://localhost:3000 上运行。

  4. 要停止服务,运行:

    docker-compose down

使用 Vercel 部署

另一种部署 Next.js 应用程序的简单方法是使用 Vercel 平台

查看我们的 Next.js 部署文档 了解更多详情。

OAuth 2.0 接口

本项目实现了基于 OAuth 2.0 协议的认证系统。以下是主要的 OAuth 接口及其使用说明:

1. 授权请求

端点: /oauth/authorize

方法: GET

参数:

  • response_type: 必须为 "code"
  • client_id: 您的客户端 ID
  • redirect_uri: 授权后重定向的 URI
  • scope: (可选)请求的权限范围

示例:

/oauth/authorize?response_type=code&client_id=your_client_id&redirect_uri=https://your-app.com/callback

2. 获取访问令牌

端点: /api/oauth/access_token

方法: POST

参数:

  • code: 从授权请求中获得的授权码
  • redirect_uri: 必须与授权请求中的 redirect_uri 相同

响应:

{
  "access_token": "at_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "expires_in": 604800,
  "token_type": "bearer"
}

3. 获取用户信息

端点: /api/oauth/user

方法: GET

请求头:

  • Authorization: Bearer {access_token}

响应:

{
  "id": "user_id",
  "email": "[email protected]",
  "username": "username",
  "admin": false,
  "avatar_url": "https://example.com/avatar.jpg",
  "name": "User Name"
}

使用流程

  1. 将用户重定向到授权页面(/oauth/authorize)。
  2. 用户授权后,您的应用将收到一个授权码。
  3. 使用授权码请求访问令牌(/api/oauth/access_token)。
  4. 使用访问令牌获取用户信息(/api/oauth/user)。

注意:确保在生产环境中使用 HTTPS 来保护所有的 OAuth 请求和响应。

贡献

欢迎贡献代码、报告问题或提出改进建议。

许可证

本项目采用 MIT 许可证。详情请见 LICENSE 文件。

About

一个基于 Discourse SSO (Single Sign-On) 用户系统的身份认证 OAuth Connect 系统。

Resources

License

Stars

Watchers

Forks

Packages