Создайте пользователя автоматически с помощью Sync Gateway и OIDC Implicit Flow - PullRequest
0 голосов
/ 16 января 2019

Я устанавливаю Couchbase Lite на Android с Sync Gateway 2.1 и Couchbase Server 6.0.

Я реализовал аутентификацию с помощью Google Sign-in, используя неявный поток OpenID Connect, и я могу получить сессионный cookie для аутентификации.

Теперь мне нужна авторизация для использования функции requireUser () в javascript файла конфигурации SGW, но Я не могу заставить SGW создать пользователя для меня .

Из того, что я прочитал в документации, установка "register":true в файле конфигурации должна заставить SGW автоматически создавать пользователя, когда он не существует, но я продолжаю получать ответ Unauthorized при отправке запроса на /_session с телом { "name": "new_user_name" }.

Чего мне не хватает, чтобы иметь возможность автоматически создавать пользователя с SGW? Я установил аутентификацию Implicit Flow, чтобы избежать необходимости управлять собственным веб-приложением для авторизации, поэтому я хотел бы избежать использования API rest Admin для создания пользователя.

Вот мой конфигурационный файл SGW:

{
"log": ["*"],
"adminInterface": ":4985",
"databases": {
    "lucidity": {
        "server": "http://xxx.xxx.xxx.xxx:8091",
        "bucket": "bucketname",
        "username": "syncgateway",
        "password": "***********",
        "num_index_replicas": 0,
        "enable_shared_bucket_access": true,
        "import_docs": "continuous",
        "oidc": {
            "providers": {
                "GoogleAuthFlow": {
                    "issuer":"https://accounts.google.com",
                    "client_id":"xxxxxxxxxxxxx.apps.googleusercontent.com ",
                    "validation_key":" xxxxxxxxxxxx",
                    "callback_url": "http://xxx.xxx.xxx.xxx:4984/bucketname/_oidc_callback",
                    "register":true
                }
            }
        },
        "users": { "GUEST": { "disabled": false, "admin_channels": ["*"] } },
        "sync": `function (doc, oldDoc) {
        }`
    }
}

EDIT : Вот журнал для моего запроса:

POST http://xx.xx.xx.xx:4984/bucketname/_session
    Content-Type: application/json
    Content-Length: 2
    Authorization: [MY_ID_TOKEN_HERE]
    Body: { }

А ответ

{
      "authentication_handlers" : [ "default", "cookie" ],
      "ok" : true,
      "userCtx" : {
        "channels" : {
          "!" : 1,
          "*" : 1
        },
        "name" : null
      }
    }

со следующим заголовком Set-Cookie:

Set-Cookie: SyncGatewaySession=xxxx; Path=/bucketname; Expires=Fri, 18 Jan 2019 08:50:36 GMT
...