Roaming Authenticator Everywhere

嘘のPasskey対応を真のPasskey対応にします

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        Roaming Authenticator Everywhere
// @namespace   https://rokoucha.net
// @version     0.0.3
// @author      Rokoucha
// @description 嘘のPasskey対応を真のPasskey対応にします
// @license     MIT
// @match       https://account.edit.yahoo.co.jp/authdevice*
// @match       https://accounts.nintendo.com/passkey/register
// @match       https://accounts.pixiv.net/passkeys/*
// @match       https://id.moneyforward.com/*
// @match       https://my.konami.net/*/security/passkey/registration/*
// @match       https://my.konami.net/*/signin
// @match       https://jp.mercari.com/mypage/personal_info/passkeys
// @match       https://x.com/*
// @run-at      document-start
// ==/UserScript==

function hook() {
    const origCreate = navigator.credentials.create
    navigator.credentials.create = function (options) {
        console.log('create hooked')
        if (options) {
            delete options.publicKey.authenticatorSelection.authenticatorAttachment
        }
        return origCreate.apply(this, [options])
    }

    const origGet = navigator.credentials.get
    navigator.credentials.get = function (options) {
        console.log('get hooked')
        if (options && options.publicKey && options.publicKey.allowCredentials) {
            options.publicKey.allowCredentials = options.publicKey.allowCredentials.map((c) => {
                c.transports = ['ble', 'hybrid', 'internal', 'nfc', 'usb']
                return c
            })
        }
        return origGet.apply(this, [options])
    }
}

console.info("place a hook")
hook()