# 登录流程概要

本页就登录流程的整体概念及建议使用的登录流程进行说明。 Mobage 提供 OAuth 2.0 / OpenID Connect 1.0 基础的 认证系统,使用与该规格关联的词汇。 若有不懂的词汇,请查看词汇相关补充。

# 选择登录流程

Mobage支持3种登录流程,建议采用 Hybrid 流程。 本页为 Hybrid 流程的相关说明。

提示

Hybrid 流程目前提供的,是使用 Mobage JavaScript SDK 装载的 v2 ,因此无法新开启 v1 的使用。本页针对 v2 进行相关说明。

# 登录流程的整体概念

Hybrid 流程的登录时序如下。 Authentication Overview

以下按照时序分别说明4个阶段。

  • 发行state值
  • Mobage 登录/应用软件授权状态的确认
  • 游戏开始按钮的显示和执行
  • 开发者服务器上的登录处理

# 发行state值

首先发行要在后续各步骤中使用的 state 值。 state 值请指定8个以上256个以内的字符串。 state 发行后,会与 Developer Server 上管理的用户登录会话进行关联后存储,并返回至游戏客户端。

# Mobage 登录/应用软件授权状态的确认

调用 Mobage JavaScript SDK(JSSDK) 的 mobage.oauth.getConnectedStatus() ,以检查 Mobage 的登录状态和授权状态。在 Mobage 开放平台上的 Mobage 登录状态和授权状态的检查程序结束后,便会调用 mobage.oauth.getConnectedStatus() 的回调,届时 login / connect 会作为参数返回。 依返回的 login / connect 参数值,如下述判断用户状态。

login connected 状态
false false 未登录
true false 未授权
true true 可开始游戏

# 游戏开始按钮的显示和执行

若是未登录或未授权的状态,游戏开始的按钮则必须伴随各种协议内容一同显示。游戏开始按钮的显示依用户状态而异,若是未登录的状态,会显示梦宝谷登录按钮以及简易会员登录的2个按钮;若是未授权则会显示安装的按钮。

状态 按钮 显示文字
未登录 简易会员注册 新規かんたん会員で始める
未登录 梦宝谷登录 モバゲーIDで始める
未授权 安装 ゲームを始める

按下各个按钮时,会调用 mobage.oauth.connect()) 如下。

简易会员注册

mobage.oauth.connect({
  state: state,
  requestType: ""window"", // 指定 ""window"" 后,便会依 Hybrid 流程发送授权请求
  easyRegistration: true // 指定 true 后,便会与授权请求同时发行简易会员
 }, function(err, result) {
  // callback 处理
 });

梦宝谷登录 / 安装

mobage.oauth.connect({
  state: state,
  requestType: ""redirect""
 }, function(err, result) {
  // callback 处理
 });

警告

请注意,如果您使用异步回调等方式调用 mobage.oauth.connect() ,登录屏幕将被浏览器的弹出阻止功能阻止,并且不会显示。

# 关于协议内容的显示

必须依照各种游戏开始按钮的显示,如下显示协议内容的链接。

  • 请在各种按钮上方显示协议内容
  • 面向简易会员的协议须显示 "会員規約等(必読)に同意して",此外则显示 "同意事項等(必読)に同意して"。

Agreement Sample

点击链接时,便会如下调用 JavaScript SDK 的协议显示用 API mobage.ui.show

# 同意事项等(必读)

mobage.ui.show( "client_agreement_menu");

# 会员协议等(必读)

mobage.ui.show( "client_agreement_menu",{ "isEasyRegistration": true});

# 发送会话信息至Redirect Endpoint

叫出mobage.oauth.connect() 后,便会返回类似以下result。result中包含code, state, session_state的会话信息。

{
    connected: true,
    login: true,
    response: {
        code : ""XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"",
        state : ""mobage-connect_XXXXXXXXXXXXXXXXXXXXXXX"",
        session_state : ""XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX""
    }
}

向Redirect Endpoint发送这些code, state, session_state。关于详情请见不切换画面登录的「向`Redirect Endpoint发送会话信息」。

# 开发者服务器上的登录处理

开发者服务器上登录处理的所需装载如下。

  • state 的验证
  • Token Request 的发送
  • ID Token 的验证
  • 登录会话的发行

# state 的验证

检查会话相关联的 state 是否与自 请求参数取得的 state 一致。如果 state 不同,则视为无效请求,并返回错误响应结束处理。

# Token Request 的发送

为取得 ID Token 等各种 Token 用的请求,将如下述要点发送。

URI

在各环境下的 Token Endpoint 的 URI 如下所示。

环境 URI
sandbox https://sb-connect.mobage.jp/connect/1.0/api/token
service https://connect.mobage.jp/connect/1.0/api/token

参数

以 application/x-www-form-urlencoded 形式交付下列参数,并以 POST方法发送。

key value
client_id Developer Site 上发行的 Client ID
redirect_uri 在 Developer Site 上注册的 Redirect URI
code 在 Authorization Response 接收的 code
grant_type 指定 authorization_code

Client 认证

Hybrid 流程中的 Token Request 必须进行 Client 认证。要执行客户端认证,需作为基本认证报头或表是单参数 client_id 和 client_secret 传递 Client ID 和 Client Secret 。 Client ID 和 Client Secret 是在 Developer Site 上进行应用软件注册后发行的值。

# ID Token 的验证

若成功取得 Access Token ,则进行响应中内含的 ID Token 签名验证,以及 JWT Claims Set 的验证。ID Token 是以 JWT 格式编码,因此请使用第三方 JWT 库,装载运用公钥的 JWT 验证。 从 执行示例应用软件 配发的 Java 示例代码,則是運用 Java JWT:JSON Web Token for Java and Android 。 关于 ID Token 的验证详情,请查看画面跳转登录 中的 ID Token 验证 。

# 登录会话的发行

如果 ID Token 合适,JWT Claims Set 的 sub 値则为 Mobage 的用户 ID ,发行给此用户的登录会话。届时在 Authorization Response 接收的 session_state 参数请与登录会话进行关联,并予以维持。已存储的 session_state 参数为 单点退出联动用的参数。 详细信息请查看 单点退出联动

# API

# 词汇相关补充

词汇 说明
Authorization Code 用于取得 Access Token 。指 code 参数。
Authorization Request 为取得 Authorization Code 用的请求
Authorization Endpoint Authorization Request 发送目的地的URI
Redirection Endpoint 以 redirect_uri 参数指定,对 Authorization Request 返回响应的URI
Access Token 用于执行 API 的 Token ,指 access_token 参数。
Refresh Token Access Token 再发行时所需的 token 。指 refresh_token 参数。在 Mobage Connect 中为90天内有效。
ID Token 以 JSON Web Token (JWT) 形式编码,为内含用户认证信息的签名token。
Token Request 为取得 Access Token 或 ID Token 等各種 Token 的请求
Token Endpoint Token Request 发送目的地的URI
MIT Licensed | Copyright © 2020-present DeNA.Co., Ltd. All rights reserved.