公共API

如果你不准备搭建服务端和Web端, 可以选择使用我们的公开API, 并忽略以下教程中所有有关服务端和Web端部署的内容.

API URLAPP URLsecretKeyserverNameDATA FILE
https://verify.nyaa.cf/api/https://verify.nyaa.cf/langualab_publiclangualabhttps://verify-db.nyaa.cf/

除官方提供的API, 你也可以选择使用第三方提供的API.
这些内容由第三方提供,我们不保证他们是安全的,请酌情使用.

API URLAPP URLsecretKeyserverNameDATA FILE
https://mauth.blingwang.cn/api/https://mauth.blingwang.cn/MelonAuth_BlwMelonAuth_Blwhttps://mauth.blingwang.cn/db/

更新记录

2021-11-07: 增加数据库文件下载地址.
2021-10-01: 增加第三方公开API和文章内部分注释/描述.
2021-09-21: 更新新版Server Config样式.

Ⅰ.准备

MelonAuth 2 可以安装在BungeeCord/Bukkit环境上;
在部署 MelonAuth 2 前你需要确认满足以下条件:
(服务端指MA的一部分, 非Minecraft服务端.)

  • 安装该插件的Minecraft服务器(BungeeCord/Bukkit等)可以连接外网;
  • 任意一台可部署Web服务的服务器;
  • 插件版本与服务端版本匹配.

1.下载所需文件

使用 MelonAuth 2 前,需要下载以下文件:

2021-09-20:
WebApp仓库暂未开放,你可以在此处下载已构建的版本;
Plugin仓库暂无Release,需自行构建,或前往此处下载Release.

2.部署Web环境

Web端需安装Nginx/Apache等类似程序(需支持Proxy)以及Java.

Ⅱ.部署

1.部署服务端

服务端用于验证码生成和完成验证.

MelonAuth 2 Server 放入任意目录, 使用Java直接运行.

java -jar MelonAuth2-Server.jar

关闭服务端并修改同目录下的 config.json.
设置 clientKey, queueKey, proxyKey, CORSList.
其中 CORSList 为WebApp的地址;
secretKey, queueKey, proxyKey 可随意设置(建议使用随机复杂类).
其他设置可按需修改;
Mojang API 相关修改需注意调用间隔限制;
数据库暂时仅支持 SQLite, 相关配置修改后不会生效.

secretKeyList queueKeyList 格式.
标准格式应当为 "key:servername:ip" .
key : secret/queue , 可自行设置, secret 需与 Plugin API 中的配置一致.
servername : 服务器名称, 需与 Plugin API 中的配置一致.
ip : 服务器IP地址, 默认 .* 为允许任意IP, 可使用正则表达式指定连接API的服务器IP, 也可以添加多个规则, 例: secretkey:servername:rule1:rule2:rule3 .

{
  "secretKeyList": [
    "secretKey:servername:.*"
  ],
  "queueKeyList": [
    "queueKey:servername:.*"
  ],
  "proxyKey": "proxyKey",
  "CORSList": [
    "https://verify.nyaa.cf/api/"
  ],
  "databaseSettings": {
    "type": "SQLite",
    "sQLiteSettings": {
      "synchronous": true,
      "journalMode": "TRUNCATE"
    },
    "mySQLSettings": {
      "host": "127.0.0.1",
      "port": 3306,
      "database": "",
      "username": "",
      "password": "",
      "tablePrefix": "AuthV2_"
    }
  },
  "skinBase": "./skins",
  "lifetimeVerification": true,
  "verificationLife": 31622400000,
  "challengeLife": 1800000,
  "challengeRegen": 900000,
  "APIUsageSettings": {
    "getCode": {
      "limitPerCircle": 40,
      "circleInMillisecond": 60000
    },
    "getStatus": {
      "limitPerCircle": 40,
      "circleInMillisecond": 60000
    },
    "getSkin": {
      "limitPerCircle": 200,
      "circleInMillisecond": 60000
    },
    "verify": {
      "limitPerCircle": 40,
      "circleInMillisecond": 60000
    }
  },
  "clientAuthenticationFailed": {
    "limitPerCircle": 1,
    "circleInMillisecond": 60000
  },
  "workerThreads": 2,
  "minimumLogRecordLevel": "fine",
  "applicationOwner": "LanguaLab",
  "applicationDescription": "MelonAuth 2 API"
}

配置完成后重新启动服务端

配置Nginx或其他程序的反代规则.
本服务端必须通过Proxy访问, 不可直接访问.
(此处暂时仅列出Nginx配置示例, 若您在其他服务上成功部署, 可将配置文件发送至 owo@cicini.moe ,我会标注来源后在此文章列出.)

请根据示例按自己的服务进行配置.
其中 proxy_pass 无需修改, 服务端端口为 11014 ,如果想要修改此端口, 请访问 MelonAuth 2 Server 的GitHub页面根据README进行操作;
proxyKey 应与服务端 config.json 中的 proxyKey 一致.

示例Ⅰ – 二级域名

server {
        listen       443 ssl http2;
        listen [::]:443 ssl http2;
        server_name  verify-api.nyaa.cf;
        ssl_certificate /etc/ssl/*.nyaa.cf/fullchain.cer;
        ssl_certificate_key /etc/ssl/*.nyaa.cf/*.nyaa.cf.key;

        location / {
            proxy_pass http://127.0.0.1:11014;
            proxy_set_header X-Forwarded-For    $remote_addr;
            proxy_set_header X-Forwarded-Proto  https;
            proxy_set_header X-Forwarded-Host   verify-api.nyaa.cf;
            proxy_set_header Proxy-Authorization   proxyKey;
        }
}

示例Ⅱ – 二级目录

server {
        listen       443 ssl http2;
        listen [::]:443 ssl http2;
        server_name  verify.nyaa.cf;
        ssl_certificate /etc/ssl/*.devnet.work/fullchain.cer;
        ssl_certificate_key /etc/ssl/*.devnet.work/*.devnet.work.key;

        location /api/ {
        #使用其他目录(例如/mc/verify/api/)均可, 只需要修改相关内容即可.
        #host和rewrite均需对应.
            rewrite /api/(.*) /$1  break;
            proxy_pass http://127.0.0.1:11014;
            proxy_set_header X-Forwarded-For    $remote_addr;
            proxy_set_header X-Forwarded-Proto  https;
            proxy_set_header X-Forwarded-Host   verify.nyaa.cf/api/;
            proxy_set_header Proxy-Authorization   proxyKey;
        }
}

2.部署WebApp

下载 MelonAuth WebApp (如果你想要将WebApp放入二级目录需自行构建);
MelonAuth WebApp 放入webroot,并新建 config.json 填写 api_prefixfooter_content .
其中 api_prefix 为API地址, footer_content 为页脚信息.

{
  "api_prefix": "https://verify.nyaa.cf/api/",
  "footer_content": "© <a href='https://github.com/LanguaLab' target='_blank'>LanguaLab</a>."
}

补充: 为二级目录构建 WebApp

module.exports 下添加 publicPath: '/melonauth2/app/path',publicPath: '/api', .(多级目录均可)
示例:

let isVerified = false
module.exports = {
  publicPath: '/api',
}

function pause (time = 1000) {
  return new Promise(resolve => setTimeout(resolve, time))
}

3.部署插件

MelonAuth 2 Plugin API 放入 plugins 文件夹;
修改 config.jsonapiURL webappURL serverName secretKey 为对应值;
其中 secretKeyserverName 需与 MelonAuth 2 Server 的配置一致.
注意 secretKey 只需要填写 MelonAuth 2 Server secretKey key 部分.

{
  "apiURL": "https://verify.nyaa.cf/api/",
  "webappURL": "https://verify.nyaa.cf/",
  "serverName": "serverName",
  "secretKey": "yourKey",
  "retryInterval": 1000
}

MelonAuth 2 Plugin 放入 plugins 文件夹;
config.json 中为登入时提示内容;
变量:
{VerificationCode} : 验证码.
{ExpireMinute} : 验证码有效时限.
{WebAppURL} : WebApp地址.
提示内容可按自身需求更改.

中文示例:

{
  "promptTexts": [
    "&7———— &f您的账户需要认证 &7————",
    "",
    "&7在加入服务器之前,您需要证明您拥有此 Minecraft 账户的完全控制权。",
    "&7您的认证编号是:",
    "",
    "&7> &f&l{VerificationCode} &7<",
    "",
    "&7请在 {ExpireMinute} 分钟内完成认证。",
    "&7请访问 &n{WebAppURL}&r &7并跟随指引完成认证。"
  ],
  "errorPrompt": [
    "&7--- &验证异常 &7---",
    "",
    "&7由于服务端与验证服务器间的通讯出现了异常,您暂时无法登入游戏。",
    "&7请稍候再试一次。",
    "&7如果此消息持续出现,请联系服务器管理员。"
  ]
}

重启服务器并提示相关加载成功的信息即可使用.

Enabled plugin MelonAuth2-Plugin-API version **** by langua
Enabled plugin MelonAuth2-Plugin version **** by langua

4.常见问题

1.服务器启动时出现报错
[SEVERE] java.io.IOException: Server returned HTTP response code: 403 for URL: https://verify.nyaa.cf/api/auth/get/status/********-****-****-****-************

若API填写无误一般为 serverName secretKey 填写错误, 注意 secretKey 只需要填写 MelonAuth 2 ServersecretKeykey 部分.