网站制作软件叫什么,公众号 手机网站开发,网站空间怎么做,桂林尚品网络科技有限公司Flutter 开发的鸿蒙AtomGit OAuth 授权应用
项目概述
这是一个基于 Flutter 开发的鸿蒙OAuth 2.0 授权应用#xff0c;用于获取 AtomGit 授权用户的个人信息。应用实现了完整的 OAuth 授权流程#xff0c;包括#xff1a;
✅ OAuth 2.0 授权码模式✅ 访问令牌获取和刷新✅…Flutter 开发的鸿蒙AtomGit OAuth 授权应用项目概述这是一个基于 Flutter 开发的鸿蒙OAuth 2.0 授权应用用于获取 AtomGit 授权用户的个人信息。应用实现了完整的 OAuth 授权流程包括✅ OAuth 2.0 授权码模式✅ 访问令牌获取和刷新✅ 用户信息获取和展示✅ 令牌本地存储和管理✅ 自动令牌刷新机制功能特性1. OAuth 授权流程使用 WebView 进行 OAuth 授权自动捕获授权回调获取访问令牌和刷新令牌2. 用户信息展示用户基本信息头像、姓名、用户名等统计信息关注者、关注中常用编程语言个人主页链接3. 令牌管理本地存储访问令牌和刷新令牌自动检测令牌过期自动刷新过期令牌退出登录功能配置步骤步骤 1创建 OAuth 应用登录 AtomGit进入设置→应用→开发者设置点击新建应用填写应用信息应用名称你的应用名称应用描述应用描述应用主页你的应用主页 URL回调地址你的重定向 URI例如myapp://oauth/callback权限范围选择需要的权限例如read:user,user:email创建完成后记录以下信息Client IDClient Secret步骤 2配置应用打开lib/services/oauth_service.dart文件修改以下配置// 这些值需要从你的 OAuth 应用配置中获取staticconstString clientIdYOUR_CLIENT_ID;// 替换为你的 Client IDstaticconstString clientSecretYOUR_CLIENT_SECRET;// 替换为你的 Client SecretstaticconstString redirectUriYOUR_REDIRECT_URI;// 替换为你的重定向 URI示例staticconstString clientIdabc123def456;staticconstString clientSecretsecret_key_here;staticconstString redirectUrimyapp://oauth/callback;步骤 3配置重定向 URIAndroid如果使用 Android 平台需要在android/app/src/main/AndroidManifest.xml中添加 Intent Filteractivityandroid:name.MainActivityandroid:exportedtrueandroid:launchModesingleTopandroid:themestyle/LaunchTheme!-- 其他配置 --!-- 添加 OAuth 回调 Intent Filter --intent-filteractionandroid:nameandroid.intent.action.VIEW/categoryandroid:nameandroid.intent.category.DEFAULT/categoryandroid:nameandroid.intent.category.BROWSABLE/dataandroid:schememyappandroid:hostoauthandroid:pathPrefix/callback//intent-filter/activity注意android:scheme和android:host需要与你的redirectUri匹配。步骤 4配置重定向 URIiOS如果使用 iOS 平台需要在ios/Runner/Info.plist中添加 URL SchemekeyCFBundleURLTypes/keyarraydictkeyCFBundleTypeRole/keystringEditor/stringkeyCFBundleURLSchemes/keyarraystringmyapp/string/array/dict/array项目结构lib/ ├── main.dart # 应用入口授权检查页面 ├── services/ │ ├── oauth_service.dart # OAuth API 服务 │ └── storage_service.dart # 本地存储服务 └── pages/ ├── oauth_page.dart # OAuth 授权页面 └── user_info_page.dart # 用户信息展示页面核心功能说明1. OAuth 授权流程// 获取授权 URLString authUrlOAuthService.getAuthorizationUrl();// 在 WebView 中打开授权页面// 用户授权后会重定向到 redirectUri并携带授权码// 使用授权码获取访问令牌OAuthToken tokenawaitOAuthService.getAccessToken(code);2. 获取用户信息// 使用访问令牌获取用户信息UserInfo userInfoawaitOAuthService.getUserInfo(accessToken);3. 刷新令牌// 当访问令牌过期时使用刷新令牌获取新的访问令牌OAuthToken newTokenawaitOAuthService.refreshAccessToken(refreshToken);4. 本地存储// 保存访问令牌awaitStorageService.saveAccessToken(token);// 获取访问令牌String?tokenawaitStorageService.getAccessToken();// 检查令牌是否过期bool isExpiredawaitStorageService.isTokenExpired();// 清除所有令牌awaitStorageService.clearTokens();API 接口说明1. 获取访问令牌接口POST https://gitcode.com/oauth/token请求参数grant_type:authorization_code获取新 token或refresh_token刷新 tokencode: 授权码获取新 token 时必填client_id: 客户端 ID获取新 token 时必填client_secret: 客户端密钥获取新 token 时在 Body 中传递refresh_token: 刷新令牌刷新 token 时必填响应示例{access_token:your_access_token,expires_in:7200,refresh_token:your_refresh_token,scope:read:user,created_at:2024-01-01T00:00:00Z}2. 获取用户信息接口GET https://api.gitcode.com/api/v5/user请求参数access_token: 访问令牌Query 参数响应示例{id:123456,login:username,name:User Name,email:userexample.com,avatar_url:https://gitcode.com/avatars/123456,bio:User bio,blog:https://blog.example.com,company:Company Name,html_url:https://gitcode.com/username,followers:100,following:50,top_languages:[Dart,JavaScript,Python]}使用流程启动应用应用会自动检查是否有有效的访问令牌如果有直接跳转到用户信息页面如果没有跳转到 OAuth 授权页面OAuth 授权在 WebView 中打开 GitCode 授权页面用户登录并授权授权成功后应用自动获取访问令牌查看用户信息自动获取并展示用户信息支持下拉刷新支持退出登录令牌管理应用会自动检测令牌是否过期如果过期会自动尝试刷新令牌如果刷新失败会提示重新授权注意事项1. 安全性⚠️不要将 Client Secret 提交到代码仓库⚠️ 建议使用环境变量或配置文件管理敏感信息⚠️ 在生产环境中考虑将 Client Secret 存储在服务器端2. 重定向 URI重定向 URI 必须与 OAuth 应用中配置的完全一致支持自定义 URL Scheme如myapp://oauth/callback也支持 HTTP/HTTPS URL需要配置相应的域名3. 令牌管理访问令牌通常有有效期如7200 秒刷新令牌的有效期通常更长建议在令牌过期前主动刷新4. 错误处理网络错误检查网络连接授权失败检查 Client ID 和 Client Secret令牌过期应用会自动尝试刷新失败后提示重新授权常见问题Q1: 授权后无法获取令牌A:检查以下几点Client ID 和 Client Secret 是否正确重定向 URI 是否与 OAuth 应用配置一致授权码是否有效授权码只能使用一次Q2: 无法获取用户信息A:检查以下几点访问令牌是否有效访问令牌是否过期是否有相应的权限范围scopeQ3: WebView 无法打开授权页面A:检查以下几点网络连接是否正常授权 URL 是否正确是否需要在 AndroidManifest.xml 中添加网络权限Q4: 令牌刷新失败A:检查以下几点刷新令牌是否有效刷新令牌是否过期如果刷新失败需要重新授权扩展功能1. 添加更多用户信息可以在UserInfo模型中添加更多字段并在getUserInfo方法中解析。2. 添加其他 API 调用参考OAuthService的实现可以添加其他 GitCode API 的调用方法。3. 改进 UI可以根据需要自定义用户信息页面的 UI 设计。4. 添加错误重试机制可以实现更完善的错误处理和重试逻辑。技术栈Flutter: 跨平台 UI 框架http: HTTP 请求库webview_flutter: WebView 组件shared_preferences: 本地存储url_launcher: URL 启动器可选参考资料AtomGit API 文档OAuth 2.0 规范Flutter 官方文档开源鸿蒙跨平台开发者社区注意这是一个示例应用用于演示 OAuth 2.0 授权流程。在生产环境中使用时请确保遵循安全最佳实践。