Как аутентифицировать пользователей в 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

Другие вопросы по тегам