В моем приложении QML Ubuntu я пытаюсь использовать учетные записи онлайн для аутентификации против моего сервера. Я немного смущен относительно того, как я должен пойти о выполнении этого. В конечном счете я хочу, чтобы пользователь смог войти в систему с их Facebook/Google/человечностью, который каждый считает. После чтения немного о OpenID и OAuth я думаю, что должен использовать одного из них для этого.
До сих пор в моем приложении я использую Ubuntu пользователя Одна учетная запись для аутентификации как это:
import QtQuick 2.0
import Ubuntu.Components 1.1
import Ubuntu.Components.ListItems 1.0 as ListItem
import Ubuntu.OnlineAccounts 0.1
import Ubuntu.OnlineAccounts.Client 0.1
import "../common"
Page {
id: root
title: "Authenticate"
AccountService {
id: accountService
onAuthenticated: {
console.log("Reply: " + JSON.stringify(reply))
}
}
AccountServiceModel {
id: accountsModel
provider: "ubuntuone"
}
function useFirstAccountToAutheticate() {
accountService.objectHandle = accountsModel.get(0, "accountServiceHandle")
accountService.authenticate({})
}
Button {
anchors {
left: parent.left
right: parent.right
bottom: parent.bottom
}
text: i18n.tr("Authenticate using Ubuntu One")
onTriggered: {
if (accountsModel.count > 0) {
useFirstAccountToAutheticate()
}
else {
setup.exec()
}
}
}
Setup {
id: setup
providerId: "ubuntuone"
onFinished: {
useFirstAccountToAutheticate()
}
}
}
После успешной аутентификации я добираюсь:
Reply: {"Secret":"consumer_key=XXXX&consumer_secret=XXXX&created=DATE&name=NAME&token=XXXX&token_secret=XXXX&updated=DATE"}
(XXXX, ДАТА и ИМЯ не являются действительными значениями),
То, что я думал о выполнении, должно отправить маркер на сервер и разговор с Ubuntu Один API (если такая вещь существует, я не смог найти его) аутентифицировать пользователя. Было бы замечательно, если кто-то мог бы сказать мне, если я на правильном пути или если я должен делать что-то по-другому, потому что я отчасти застреваю.
Кроме того, я использую компонент Установки в своем QML для создания человечности одна учетная запись в случае, если у пользователя уже нет того. Это, кажется, работает на меня на моем рабочем столе Utopic, но не работает над моим телефоном Ubuntu. Я предполагаю, что должен установить applicationId, но для этого я должен создать .application XML-файл и установить его в каталоге, который я не думаю, что у меня есть доступ к тому, поскольку мое приложение заключено.
Любая справка ценится
Необходимо будет обеспечить реализацию OAuth на сервере, и на веб-сайте, позволить пользователю аутентифицировать в сервисе через любой из тех других сервисов через OpenID (или безотносительно совместно использованного механизма аутентификации, который они обеспечивают). Тогда Вы предоставили бы плагин Учетные записи Онлайн в Вашем пакете клиентского приложения, который позволит пользователю входить в Ваш сайт с помощью механизма OAuth. Маркер OAuth, данный в результате этого, был бы сохранен локально, и Ваше клиентское приложение будет использовать это, чтобы аутентифицировать на Вашем сервере для любой связи API, или только войти в систему и перенаправить к зарегистрированной версии Вашего веб-сайта, если это будет веб-приложение.
Я могу только ответить на вторую часть вопроса (о .application файле), потому что я не знаком с услугами, предложенными учетной записью U1.
Вы корректны в этом, Вам нужно .application
файл, и Вам на самом деле также нужен a .service
файл также. К счастью, возможно поставить их также с ограниченными приложениями, поставленными в пакете щелчка. Ваш manifest.json
файл должен содержать что-то вдоль этих строк:
{
...
"name": "com.example.package",
"hooks": {
"my-app": {
"account-application": "my-app.application",
"account-service": "my-app.service",
"apparmor": "my-app.json",
"desktop": "my-app.desktop"
}
},
...
}
Когда пакет щелчка установлен, .application
и .service
файлы обрабатываются и установили под ~/.local/share/accounts/
, и их имена (и поэтому идентификаторы) изменились на <package-name>_<application-name>.{service,application}
, к которому в примере выше привел бы com.example.package_my-app.{service,application}
.
Только для полноты, я показываю пример того, на что могли быть похожими эти файлы:
<?xml version="1.0" encoding="UTF-8" ?>
<application>
<service-types>
<service-type id="com.example.package_my-app">
<description>Login into XXX using your U1 account</description>
</service-type>
</services-types>
</application>
и
<?xml version="1.0" encoding="UTF-8"?>
<service>
<type>com.example.package_my-app</type>
<name>U1 for XXX</name>
<provider>ubuntuone</provider>
</service>