

Паски потрясающие! Просто публичная/частная пара ключей, которую вы можете использовать для аутентификации с веб -сайтом (или связанным приложением).
Они гораздо более удобны, чем пароли, потому что вам не нужно ничего помнить или выбирать что -то, что удовлетворяет все более сложным правилам. Они также более безопасны, потому что они привязаны к сайту, с которыми вы аутентифицируете, потенциально устраняя фишингу, и на сервере хранится только открытый ключ, поэтому ничего не стоит воровать (общедоступный ключ, как вы уже догадались, публично).
Частный ключ сохраняется вами. Или, скорее, ваш менеджер паролей, поэтому его можно поделиться между устройствами. Apple, Google, Microsoft и Amazon активно поощряют поглощение. Если вы храните PassKey в менеджере паролей (например, Dashlane, 1Password или Apple Keychain), вы также можете поделиться им с друзьями.
Регистрация с и входом в систему, веб -сайты и приложения до сих пор были огромным барьером, но с пассажирами это, наконец, решается. Давайте реализуем их повсюду, чтобы мы наконец -то смогли отправить пароли в мусорное ведро. Паски проще и безопаснее - что не нравится?
В Red Badger мы поддерживаем многоплатформенный инструментарий для разработки приложений с открытым исходным кодом под названием Crux. Он использует Rust и Webassembly, чтобы облегчить и весело создавать приложения, которые работают на iOS, Android и Web (и командная строка, а также приложения терминала и ...).
Crux позволяет нам создавать функциональность нашего приложения один раз и проверить его в миллисекундах, что позволяет нам гарантировать, что наше приложение работает правильно, и точно так же, на всех платформах.
Это репо предназначено о привлечении паски в приложения Crux.
Это не очень сложно сделать, но есть несколько шагов как для регистрации, так и для входа в систему, которые вам нужно получить правильно. Немного сложно добавить его в существующие веб -приложения (и приложения для iOS и приложения для Android) и убедиться, что реализация верна во всех трех. Крукс помогает здесь. Мы можем просто построить и проверить его один раз.
shared каталог в этом репо содержит способность Crux Passkey, которая, наряду с возможностями crux_http , организована приложением Crux Auth, с тестами, которое можно использовать в качестве «суб-приложения», вложенного внутри другого приложения Crux.
Мой план был отличным - собрать вместе действительно классные технологии, такие как пассажиры, ржавчина, rust, webassembly и суть - но я хотел большего.
Поэтому я добавил Фермиона вращения в уравнение. Спин отличный! Это без сервера без холодного запуска. Ультра легкие услуги, которые начинаются в ответ на входящий запрос (в микросекундах) и умирают после обработки запроса.
Для поддержки Passkeys нам нужен бэкэнд, который разоблачает протокол WebAuthn. Он написан в ржавчине и составлен в Webassembly ( wasm32-wasi ). Мне пришлось прыгнуть через несколько обручей, например, продавца, совместимая с WASM, версия OpenSSL-мы здесь на кровотечении-но это работает!.
Сервер также размещает веб -приложение Leptos, написанное в Rust.
Это может быть развернуто, как и для Fermyon Cloud.
Перемение в каталог crux-passkey-server :
cd crux-passkey-server Создайте файл .env со следующим содержанием:
export SPIN_VARIABLE_DOMAIN_LOCAL=localhost
export SPIN_VARIABLE_DOMAIN_REMOTE=crux-passkey-server-8sdh7f6w.fermyon.app # Change this to your own domain Создайте сертификат SSL (предпочтительно выпущенный доверенным CA) и Key и поместите их в каталог certs . Имена файлов должны быть cert.pem и key.pem . Вы можете следовать инструкциям здесь (вам может потребоваться добавить CA в Trust Store вашего браузера-или доверять им в ключах на MacOS-Spin 2.0 сбои при использовании самореагированных сердечков)
Запустите локальный спин -сервер:
./run.shА затем откройте свой браузер по адресу https: // localhost
Или опубликовать в Fermyon Cloud (вам понадобится учетная запись Fermyon и установить Fermyon CLI):
./cloud_create_db.sh # Only need to do this once
./deploy.shА затем откройте свой браузер по адресу https://crux-passkey-server-8sdh7f6w.fermyon.app (или какой бы ни был ваш домен)

Диаграмма выше показывает процесс регистрации.
Пользователь входит в свой адрес электронной почты и нажимает «Зарегистрироваться» (Web) или «Зарегистрироваться» (приложение iOS).
Приложение auth , через событие GetCreationChallenge и возможность crux_http , отправляет запрос POST на бэкэнд.
Бэкэнд отвечает объектом PublicKeyCredentialCreationOptions через событие CreationChallenge .
Для приложения для iOS это передается через способность passkey , в сторону iOS-оболочки реализации passkey возможностей, которая использует ASAuthorizationController , чтобы побудить пользователя создать PassKey.
Для веб-оболочки это передается с помощью возможностей passkey passkey в метод navigator.credentials.create .
Пользователь создает PassKey, а возможность passkey возвращает объект RegisterPublicKeyCredential через событие RegisterCredential , которое содержит открытый ключ, подписанный вызов и другую информацию.
Событие RequestCredential обрабатывается приложением, отправляя запрос POST с помощью возможности crux_http , на бэкэнд с объектом RegisterPublicKeyCredential .
Бэкэнд проверяет информацию и регистрирует пользователя, сохраняя общедоступный ключ пользователя в базе данных, отвечая на 201 Created код состояния.
CredentialRegistered событие обрабатывается приложением, которое обновляет его состояние, чтобы указать, что пользователь зарегистрирован.

Пользователь вводит свой адрес электронной почты и нажимает «Вход» (Web) или «Войдите» (приложение iOS).
Приложение auth , через событие GetRequestChallenge и возможность crux_http , отправляет запрос POST на бэкэнд.
Бэкэнд отвечает объектом PublicKeyCredentialRequestOptions через мероприятие RequestChallenge .
Для приложения iOS это передается через способность passkey , в сторону iOS-оболочки реализации passkey Passication, которая использует ASAuthorizationController , чтобы побудить пользователя войти в систему со своим PassKey.
Для веб-оболочки это передается через возможности passkey , в браузер navigator.credentials.get Метод с помощью веб-оболочки в реализации возможностей passkey , которая побуждает пользователя войти в систему со своим пассивным.
Пользователь вводит свой PassKey, а возможность passkey возвращает объект PublicKeyCredential через Credential событие, которое содержит подписанный вызов и другую информацию.
Событие RequestCredential обрабатывается приложением, отправляя запрос POST через возможность crux_http , на бэкэнд с объектом PublicKeyCredential .
Бэкэнд проверяет информацию и отвечает кодом состояния 200 OK .
Служение CredentialVerified обрабатывается приложением, которое обновляет его состояние, чтобы указать, что пользователь вошел в систему.
shared каталог содержит ядро реализации. Это пример приложения Root Crux, которое гнездирует приложение auth Crux. Приложение auth организует возможности crux_http и passkey для обеспечения регистрации PassKey и входа в систему против бэкэнда.