标签 注册流程 下的文章

网址:https://www.hi168.com

第一步:填写信息注册(需要手机号)

第二步:登入后进入类似电脑的桌面,长按存储管理打开

第三步:点击左上的加号创建存储桶(如果无法创建,去应用中心随便部署一个应用再创建存储桶),名字随便起,创建成功后的挂载名称是真正的桶名

第四步:点击存储管理右上的齿轮,获取密钥和密钥ID(或者点开部署的应用,左侧图标中的挂载存储桶同样可以获取,部署的应用用完就可以删了)

挂载地址:https://s3.hi168.com/

不实名认证是500G,实名后是1T

实名在桌面左下角点开后的个人信息

懒得配图了(评论区帮忙补一下),我也是在QQ群看到其他人分享的


📌 转载信息
原作者: shaonian
转载时间: 2026/1/27 08:09:31

我今天又试验了一遍,其实上周就试过,15 分钟从注册到验证完成一路丝滑,并且没有要手机验证码或者扫码。

先上图,可以看下我的步骤,我的时间设置是美国时间,我先注册了,一分钟都没耽误,立马去验证学生资格,绑卡,然后再回来绑两步验证的,可以看到我的注册时间是 16 点 19,绑卡成功订阅的时间是 16 点 30,然后再绑的两步验证。

接下里就是讲操作,我是安卓手机,首先节点要纯净,我用的家宽,提前几天把手机的语言设置成英语,时区设置成美国,不要临时设置,临时设置我试过有可能不奏效,设置了几天之后,然后保证有已经登录的稳定的账号,在 play 商店或者其他谷歌的产品账号那里直接点添加,就很大概率是不要手机号,直接注册成功,比如像这样,我今天和上周的都没要手机号,直接注册成功。

然后注册成功后,我两步验证都没做,直接去浏览器,我用的 edge. 直接去登录,看有没有学生资格。,https://gemini.google/students,点 get offer 出现下图。

然后就就用 u 佬的 1Key 过验证,https://batch.1key.me/, 订阅绑卡就成功了

然后再回去设置两步验证。完成,


📌 转载信息
原作者:
qiqilove
转载时间:
2026/1/11 08:57:15

请我打款(bushi)

给我博客加点流量吧,我到时候一些文章放在我的博客上面
博客

kiro 协议注册流程分析

整体架构

┌─────────────────────────────────────────────────────────────────┐
│                        注册流程总览                              │
├─────────────────────────────────────────────────────────────────┤
│  1. OIDC 客户端注册 → 2. 设备授权 → 3. 邮箱创建                  │
│  4. Portal 登录初始化 → 5. Workflow 初始化                       │
│  6. 邮箱提交 → 7. 进入注册流程 → 8. Profile 创建                 │
│  9. 邮箱验证 → 10. 身份创建 → 11. 密码设置                       │
│  12. 登录完成 → 13. SSO Token → 14. 设备授权确认                 │
│  15. Token 关联 → 16. 获取最终 Refresh Token                     │
└─────────────────────────────────────────────────────────────────┘

核心组件

1. JWE 加密器 (JWEEncryptor)

用于密码的安全传输,采用 JWE (JSON Web Encryption) 标准。

加密流程:

1. 从服务器获取 RSA 公钥 (JWK 格式)
2. 生成随机 CEK (Content Encryption Key, 256-bit)
3. 使用 RSA-OAEP-256 加密 CEK
4. 构建 JWT Claims (包含密码、时间戳、issuer、audience 等)
5. 使用 A256GCM 对称加密 JWT Claims
6. 输出 JWE Compact Serialization 格式

JWE Header 结构:

{ "alg": "RSA-OAEP-256", "kid": "<key-id>", "enc": "A256GCM", "cty": "enc", "typ": "application/aws+signin+jwe" } 

JWT Claims 结构:

{ "iss": "<region>.<issuer>", "iat": <timestamp>, "nbf": <timestamp>, "jti": "<uuid>", "exp": <timestamp + 300>, "aud": "<region>.<audience>", "password": "<password>" } 

2. 指纹生成器 (FingerprintGenerator)

生成浏览器指纹用于反欺诈检测。

生成的标识符:

  • fingerprint: 浏览器环境指纹 (Base64 编码的加密数据)
  • visitorId: 访客唯一标识 (UUID 格式)
  • ubid: 平台用户标识 (数字格式)

3. 浏览器数据生成器 (BrowserDataGenerator)

模拟真实浏览器行为数据。

数据结构:

{ "attributes": { "fingerprint": "<fingerprint>", "eventTimestamp": "<ISO8601>", "timeSpentOnPage": "<milliseconds>", "eventType": "PageLoad|PageSubmit", "ubid": "<ubid>", "pageName": "<page>", "visitorId": "<visitor-id>" }, "cookies": {} } 

详细流程分析

Phase 1: OIDC 初始化

Step 1: 注册 OIDC 客户端

端点: POST /client/register

请求:

{ "clientName": "Amazon Q Developer for command line", "clientType": "public", "scopes": ["codewhisperer:completions", "codewhisperer:analysis", "codewhisperer:conversations"] } 

响应:

{ "clientId": "<client-id>", "clientSecret": "<client-secret>" } 

Step 2: 设备授权

端点: POST /device_authorization

请求:

{ "clientId": "<client-id>", "clientSecret": "<client-secret>", "startUrl": "https://view.awsapps.com/start" } 

响应:

{ "deviceCode": "<device-code>", "userCode": "<user-code>", "verificationUri": "<url>", "verificationUriComplete": "<url-with-code>" } 

Phase 2: 账号创建

Step 3: 临时邮箱创建

支持两种邮箱服务:

  1. mail.tm (公开 API)
  2. 私有邮箱服务 (备用)

mail.tm 流程:

1. GET /domains → 获取可用域名
2. POST /accounts → 创建邮箱账户
3. POST /token → 获取访问令牌

Phase 3: Portal 登录流程

Step 4: 初始化 Portal Login

端点: GET /login?directory_id=view&redirect_url=<url>

响应:

{ "redirectUrl": "https://signin.aws/platform/<directory>/login?workflowStateHandle=<handle>" } 

关键参数:

  • workflowStateHandle: 工作流状态句柄,贯穿整个流程

Step 5: 访问 Signin 页面

模拟浏览器访问登录页面,获取必要的 Cookies:

  • platform-ubid
  • login-interview-token

Step 6-7: Workflow 初始化

端点: POST /platform/<directory>/api/execute

两次 POST 请求:

  1. 第一次 (stepId=“”): 初始化工作流
  2. 第二次 (stepId=“start”): 获取 aws-usi-authn Cookie

请求结构:

{ "stepId": "", "workflowStateHandle": "<handle>", "inputs": [ {"input_type": "FingerPrintRequestInput", "fingerPrint": "<fingerprint>"} ], "requestId": "<uuid>" } 

Phase 4: 用户注册

Step 8: 提交邮箱 (SUBMIT)

关键 Cookie 设置:

  1. awsccc: Base64 编码的 JSON (包含 consent 信息)
  2. awsd2c-token-c: 从 vs.aws.amazon.com/token 获取的 D2C Token

请求:

{ "stepId": "get-identity-user", "workflowStateHandle": "<handle>", "actionId": "SUBMIT", "inputs": [ {"input_type": "UserRequestInput", "username": "<email>"}, {"input_type": "ApplicationTypeRequestInput", "applicationType": "SSO_INDIVIDUAL_ID"}, {"input_type": "UserEventRequestInput", ...}, {"input_type": "FingerPrintRequestInput", ...} ], "visitorId": "<visitor-id>" } 

响应处理:

  • 200: 用户已存在 (登录流程)
  • 400 + ENTITY_DOES_NOT_EXIST: 用户不存在 (继续注册)

Step 9: 进入注册 (SIGNUP)

请求:

{ "stepId": "get-identity-user", "workflowStateHandle": "<handle>", "actionId": "SIGNUP", "inputs": [...] } 

响应:

{ "redirect": { "url": "/signup?workflowStateHandle=<new-handle>" }, "presentationContext": { "workflowId": "<workflow-id>" } } 

Step 10-10.5: Signup 页面初始化

两次 POST 到 /signup/api/execute

  1. 第一次 (stepId=“”): 初始化注册页面
  2. 第二次 (stepId=“start”): 获取 workflowId

Phase 5: Profile 创建与验证

Step 11: Profile /api/start

端点: POST /api/start

请求:

{ "workflowID": "<workflow-id>", "browserData": {...} } 

响应:

{ "workflowState": "<encrypted-state>" } 

Step 12: 发送验证码

端点: POST /api/send-otp

请求:

{ "workflowState": "<state>", "email": "<email>", "browserData": {...} } 

Step 13: 获取验证码

从邮箱服务获取 6 位数字验证码。

轮询策略:

  • 最大重试次数: 30
  • 间隔: 5 秒
  • 正则匹配: \b(\d{6})\b

Step 14: 创建身份

端点: POST /api/create-identity

请求:

{ "workflowState": "<state>", "userData": { "email": "<email>", "fullName": "<name>" }, "otpCode": "<6-digit-code>", "browserData": {...} } 

响应:

{ "registrationCode": "<code>", "signInState": "<base64-state>" } 

Phase 6: 密码设置

Step 15: 初始化密码设置页面

端点: POST /signup/api/execute

请求:

{ "stepId": "", "state": "<sign-in-state>", "inputs": [ {"input_type": "UserRegistrationRequestInput", "registrationCode": "<code>", "state": "<state>"}, {"input_type": "FingerPrintRequestInput", ...} ] } 

响应 (关键):

{ "workflowStateHandle": "<password-handle>", "stepId": "get-new-password-for-password-creation", "workflowResponseData": { "encryptionContextResponse": { "publicKey": { "kid": "<key-id>", "n": "<modulus>", "e": "<exponent>", "alg": "RSA-OAEP-256" }, "issuer": "signin.aws", "audience": "AWSPasswordService", "region": "us-east-1" } } } 

Step 16: 设置密码

关键修复点:

  1. CSRF Token 处理:

    • directory-csrf-token: 只包含 loginCsrfToken
    • workflow-csrf-token: 包含 loginCsrfToken + signupCsrfToken
  2. Cookie 顺序 (重要):

    directory-csrf-token → aws-usi-authn → platform-ubid → 
    login-interview-token → workflow-step-id → workflow-csrf-token → 
    workflow-csrftoken → awsccc → awsd2c-token-c
    
  3. 密码加密:

    • 使用服务器返回的公钥进行 JWE 加密
    • Plaintext 填充到 192 字节

请求:

{ "stepId": "get-new-password-for-password-creation", "workflowStateHandle": "<password-handle>", "actionId": "SUBMIT", "inputs": [ { "input_type": "PasswordRequestInput", "password": "<jwe-encrypted-password>", "successfullyEncrypted": "SUCCESSFUL", "errorLog": null }, {"input_type": "UserEventRequestInput", ...}, {"input_type": "UserRequestInput", "username": "<email>"}, {"input_type": "FingerPrintRequestInput", ...} ], "visitorId": "<visitor-id>" } 

成功响应:

{ "stepId": "end-of-user-registration-success", "redirect": { "url": "/login?workflowStateHandle=<handle>&workflowResultHandle=<auth-code>" } } 

Phase 7: 获取 Token

Step 17: 完成登录流程

set_password 响应的重定向 URL 中提取 workflowResultHandle (即 authCode)。

Step 18: 获取 SSO Token

端点: POST /auth/sso-token

请求 (x-www-form-urlencoded):

authCode=<auth-code>&state=<state>&orgId=view

Headers:

x-amz-sso-csrf-token: <login-csrf-token>

响应:

{ "token": "<user-session-id>", "redirectUrl": "<url>" } 

Step 19: 接受设备授权

端点: POST /device_authorization/accept_user_code

请求:

{ "userCode": "<user-code>", "userSessionId": "<session-id>" } 

响应:

{ "deviceContext": { "clientId": "<client-id>", "deviceContextId": "<context-id>" } } 

Step 20: 关联 Token

端点: POST /device_authorization/associate_token

请求:

{ "deviceContext": {...}, "userSessionId": "<session-id>" } 

Step 21: 获取最终 Token

端点: POST /token

请求:

{ "clientId": "<client-id>", "clientSecret": "<client-secret>", "deviceCode": "<device-code>", "grantType": "urn:ietf:params:oauth:grant-type:device_code" } 

轮询处理:

  • authorization_pending: 等待 2 秒重试
  • slow_down: 等待 5 秒重试

成功响应:

{ "accessToken": "<access-token>", "refreshToken": "aor-<refresh-token>" } 

关键技术点

1. Cookie 管理

Cookie 名称用途
awscccsignin.aws用户同意信息 (Base64 编码)
awsd2c-token-csignin.awsD2C Token (JWT)
login-interview-tokensignin.aws登录会话 Token
aws-usi-authnsignin.aws认证 Token
workflow-step-idsignin.aws当前工作流步骤
directory-csrf-tokensignin.awsCSRF 保护
workflow-csrf-tokensignin.aws工作流 CSRF 保护

2. 状态管理

workflowStateHandle → 工作流状态句柄 (URL 参数)
login-interview-token → 登录会话 Token (Cookie)
signInState → 登录状态 (Base64 编码的 JSON)
workflowState → 工作流状态 (加密字符串)

3. 请求头模拟

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...
sec-ch-ua: "Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-origin

4. 错误处理

错误码含义处理方式
ENTITY_DOES_NOT_EXIST用户不存在继续注册流程
SIGNIN_BAD_REQUEST_ERROR请求格式错误检查 Cookie/Header
authorization_pending授权待处理轮询重试
slow_down请求过快增加等待时间

安全考虑

  1. 密码传输: 使用 JWE 加密,RSA-OAEP-256 + A256GCM
  2. CSRF 保护: 多层 CSRF Token 验证
  3. 指纹验证: 浏览器指纹用于反欺诈
  4. 会话管理: 多个 Token 协同工作

版本演进

版本关键修复
V7awsccc Cookie Base64 编码、D2C Token 获取时机
V8SIGNUP 流程 workflowStateHandle 保存
V9signin_visitor_id 一致性
V10aws-usi-authn Cookie 更新
V13-V16Cookie 顺序、CSRF Token 处理
V20-V21重复 Cookie 清理、手动构建 Cookie Header
V22JWE 加密使用服务器返回的 issuer/audience
V24-V25登录完成流程、SSO Token 获取

流程图

┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  OIDC 注册   │────▶│  设备授权    │────▶│  邮箱创建    │
└──────────────┘     └──────────────┘     └──────────────┘
                                                 │
                                                 ▼
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  Workflow    │◀────│  Signin 页面 │◀────│  Portal 登录 │
│  初始化      │     │  访问        │     │  初始化      │
└──────────────┘     └──────────────┘     └──────────────┘
       │
       ▼
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  邮箱提交    │────▶│  SIGNUP      │────▶│  Profile     │
│  (SUBMIT)    │     │  进入注册    │     │  创建        │
└──────────────┘     └──────────────┘     └──────────────┘
                                                 │
                                                 ▼
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  身份创建    │◀────│  验证码获取  │◀────│  发送 OTP    │
└──────────────┘     └──────────────┘     └──────────────┘
       │
       ▼
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  密码页面    │────▶│  设置密码    │────▶│  登录完成    │
│  初始化      │     │  (JWE 加密)  │     │              │
└──────────────┘     └──────────────┘     └──────────────┘
                                                 │
                                                 ▼
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  Token 关联  │◀────│  设备授权    │◀────│  SSO Token   │
│              │     │  确认        │     │  获取        │
└──────────────┘     └──────────────┘     └──────────────┘
       │
       ▼
┌──────────────┐
│  获取最终    │
│  Refresh     │
│  Token       │
└──────────────┘

依赖库

  • requests: HTTP 请求
  • cryptography: JWE 加密 (RSA-OAEP-256, A256GCM)
  • gzip: 响应解压


本文档仅供技术学习研究使用


📌 转载信息
原作者:
lansonsam
转载时间:
2026/1/4 12:30:09