Как аутентифицировать пользователей в FirefoxOS, используя BrowserID / Persona?
Я пытаюсь написать приложение FirefoxOS для своего портала, которое использует Mozilla Persona для аутентификации. Как мне поступить, если я хочу добиться:
- Разрешить пользователям моего приложения регистрироваться на моем портале с помощью Persona
- Разрешить пользователям моего приложения входить на мой портал в приложении FirefoxOS и выполнять некоторые действия с API
- Зависит от того, вошли пользователи или нет - предоставляя доступ к различным действиям.
Я нашел этот пост с информацией, которая уже интегрирована: http://identity.mozilla.com/post/47114516102/persona-on-firefox-os-phones но я не могу найти реальных примеров.
Какой тип приложения мне нужно создать? веб-приложение или привилегированное?
Я пытаюсь реализовать это, используя обычный учебник: https://developer.mozilla.org/en/Persona/Quick_Setup
Но с этим кодом:
signinLink.onclick = function() { navigator.id.request(); };
Я получаю только следующую ошибку:
[17:25:18.089] Error: Permission denied to access object
1 ответ
Одна вещь, чтобы убедиться, что вы звоните watch()
настроить обратные вызовы, прежде чем позвонить request()
,
Например, что-то вроде этого на вашей странице:
<script src="https://login.persona.org/include.js"></script>
<script>
window.addEventListener("DOMContentLoaded", function() {
navigator.id.watch({
// Provide a hint to Persona: who do you think is logged in?
loggedInUser: null,
// Called when persona provides you an identity assertion
// after a successful request(). You *must* post the assertion
// to your server for verification. Never verify assertions
// in client code. See Step 3 in this document:
// https://developer.mozilla.org/en/Persona/Quick_Setup
onlogin: function(assertion) {
// do something with assertion ...
// Note that Persona will also call this function automatically
// if a previously-signed-in user visits your page again.
},
onlogout: function() {
// handle logout ...
},
onready: function() {
// Your signal that Persona's state- and callback-management
// business is complete. Enable signin buttons etc.
}
});
// Set up click handlers for your buttons
document.getElementById("signin").addEventListener(
'click', function() {
navigator.id.request({
// optional callback to request so you can respond to
// a user canceling the sign-in flow
oncancel: function() { /* do something */ }
});
}
});
});
</script>
Вот пример, который показывает это в действии:
https://people.mozilla.org/~jparsons/persona_example.html
Однако в FirefoxOS вы должны знать, что установленные приложения (не упакованные и не сертифицированные, а стандартные установленные приложения) имеют уникальный источник формы app://{uuid}
, с разным UUID для каждого устройства. К сожалению, это бесполезно для входа в систему, так как ваш сервер не может узнать, является ли приложение, запрашивающее вход, другом или врагом. Обойти эту проблему можно, запустив свой персональный код в невидимом iframe, размещенном на вашем сервере. Таким образом, iframe будет иметь правильное происхождение, и ваш сервер будет знать, что это ваше приложение. Iframe и приложение могут общаться через postMessage.
В случае упакованного приложения (иногда называемого привилегированным приложением) вашим источником будет источник, объявленный в манифесте веб-приложения. Например, app://yourapp.yoursite.org
, Это дает вам лучшую уверенность в том, что приложение действительно ваше, но по-настоящему параноик все же может захотеть применить трюк iframe.
Надеюсь это поможет! J