用途
LINE Login 是 LINE 提供的用户认证与授权方案,基于 OAuth 2.0 与 OpenID Connect 构建(v2.1),用于为 Web 应用、原生应用(iOS/Android)、Unity 和 Flutter 提供用户认证、资料访问和机器人(Bot)关联能力。本技能是一份综合参考文档,用于在构建或审查 LINE Login 相关代码时查阅规范与约束。
文档明确提示:不要凭记忆回答 LINE Login 问题,因为 LINE 会频繁更新 API,训练数据不可靠,应始终查阅随附的参考文件。
主要能力
- OAuth 2.1 授权码流程:用户跳转授权端点,经 LINE 登录界面后回调携带 code,再交换令牌。
- PKCE 支持:推荐用于公共客户端(SPA/移动端),仅支持 S256。
- 令牌管理:验证访问令牌、刷新令牌、撤销令牌、验证 ID Token。
- ID Token JWT 验证:签名算法为 HS256(Web 登录)或 ES256(原生应用、SDK、LIFF)。
- 用户资料与 Bot 关联:获取用户资料、检查好友状态、解除授权;bot_prompt 参数支持 normal 与 aggressive 两种模式。
- 安全规范:state 必须加密随机并在回调时校验、Channel Secret 仅限服务端、redirect_uri 必须为 HTTPS、ID Token 必须先验证签名。
使用方式
环境变量:
LINE_LOGIN_CHANNEL_ID=LINE Login Channel ID
LINE_LOGIN_CHANNEL_SECRET=Channel secret (ID token verification, token exchange)
LINE_LOGIN_REDIRECT_URI=Registered callback URL
最小授权码流程(伪代码):
# 1. Redirect user to authorize
state = random_token()
session.save(state)
redirect to:
https://access.line.me/oauth2/v2.1/authorize?
response_type=code
&client_id={channel_id}
&redirect_uri={callback_url}
&state={state}
&scope=profile%20openid%20email
# 2. Callback — exchange code for token
if params.state != session.state:
return 403 # CSRF check failed
POST https://api.line.me/oauth2/v2.1/token
grant_type=authorization_code
&code={params.code}
&redirect_uri={callback_url}
&client_id={channel_id}
&client_secret={channel_secret}
# 3. Response
{ access_token, token_type, refresh_token, expires_in, id_token, scope }
关键端点:
| 步骤 | 端点 |
|---|---|
| 授权 | GET https://access.line.me/oauth2/v2.1/authorize |
| 令牌交换 | POST https://api.line.me/oauth2/v2.1/token |
| 验证访问令牌 | GET https://api.line.me/oauth2/v2.1/verify?access_token={token} |
| 刷新令牌 | POST https://api.line.me/oauth2/v2.1/token (grant_type=refresh_token) |
| 撤销令牌 | POST https://api.line.me/oauth2/v2.1/revoke |
| 验证 ID Token | POST https://api.line.me/oauth2/v2.1/verify (id_token + client_id) |
| 获取用户资料 | GET https://api.line.me/v2/profile |
| 检查好友状态 | GET https://api.line.me/friendship/v1/status |
| 解除授权 | POST https://api.line.me/user/v1/deauthorize |
作用域:profile、openid、email(空格分隔)。授权码有效期 10 分钟,一次性使用。访问令牌有效期 30 天,刷新令牌有效期 90 天。
SDK:原生 SDK 支持 iOS (Swift)、Android、Unity、Flutter;Web 应用直接使用 OAuth 2.1 流程,无需 SDK。
适用场景
- 为 Web、原生、Unity、Flutter 应用接入 LINE 登录。
- 需要获取 LINE 用户资料或检查好友关系。
- 需要将用户与 LINE 官方账号(Bot)关联。
- 构建或审查 LINE Login 代码时对照规范与安全约束。
限制
- 文档强调不要凭记忆回答,须查阅参考文件。
- PKCE 仅支持 S256。
- redirect_uri 必须为 HTTPS。
- Channel Secret 仅限服务端使用,不得暴露给客户端。
- 授权码 10 分钟有效且一次性使用。
- 关于收费、价格、平台支持范围等具体信息,资料中暂未提供。
参考文件索引
| 文件 | 主题 |
|---|---|
| references/api-common.md | 优先阅读。速率限制、状态码、前向兼容、client_secret 规则、日志 |
| references/oauth-flow.md | 授权流程、PKCE、作用域、认证方式、错误码 |
| references/token-management.md | 令牌交换/刷新/撤销/验证、ID Token 声明与签名 |
| references/security.md | 安全清单、开发指南、自动登录失败、登录按钮设计 |
| references/user-profile.md | 用户资料 API、关联 Bot、好友状态 |
| references/experts.md | LINE Login 领域专家,用于架构指导 |