6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NextCloudのLogin flow v2でアプリパスワードを取得する

Last updated at Posted at 2021-01-16

NextCloudのAPIを使う時に、ユーザー名・パスワードの代わりに「アプリパスワード」を使うことができます。これはユーザー自身が設定画面から作成できるものです。

image.png

……でも今の時代、もうちょっとスマートにやりたくないですか。

そんなあなたに Login flow v2。

これを使うと以下のような流れでアプリパスワードを取得できます。

  1. アプリ側で「NextCloudでログイン」的なボタンを押す
  2. アプリに表示されたURLをブラウザで開く
  3. ブラウザでNextCloudにログインして、アクセスを許可する
  4. アプリに戻るとログインが完了している 🎉

以降、順を追って紹介します。

注意

この記事は Nextcloud 20.0.5 で動作確認しながら書いています。
バージョン違いなどで動作が異なる場合は、以下の公式ドキュメントを参照してください。

1. トークンとログインURLを取得

まず /login/v2 にPOSTします。この時の User-Agent がアプリ名として確認画面やセッション一覧に表示されるので、いい感じの値を設定しておきましょう。

※以降、example.comの部分は適当に読み替えてください。index.phpが必要な場合は足してください。

$ curl -A "myapp/1.2" -X POST http://example.com/login/v2
{
  "poll": {
    "token": "wsEf...HfkC",
    "endpoint": "http://example.com/login/v2/poll"
  },
  "login": "http://example.com/login/v2/flow/q2P6...DS5U"
}

poll の中身はあとで結果をポーリングする時に使うので取っておきます。 login に入っているURLをユーザーに伝えて、開いてもらいます。

2. ブラウザでアクセスを許可する

1で得られたURLにユーザーがアクセスすると、以下のように画面が遷移していきます。

image.png
(ログインしてなければここでログイン画面が入る)
image.png
image.png

これでアプリパスワードの発行が行われました。設定 → セキュリティ を見ると、画面で生成したのと同じように一覧に表示されています。

image.png

3. アプリパスワードを取得する

1で取っておいた poll の情報を使います。 poll.endpoint に入っていたURLに対して、 token=<poll.tokenの値> という形でクエリパラメータをつけてPOSTすると、ユーザー名とアプリパスワードが得られます。

$ curl -A "myapp/1.2" -X POST http://example.com/login/v2/poll -d "token=wsEf...HfkC"
{
  "server": "http://example.com",
  "loginName": "testuser",
  "appPassword": "8Ekh....Zu4n"
}

このとき、アクセスの許可が済んでいない場合は404レスポンスが帰ってきます。
ユーザーにURLを提示してすぐポーリングを始める場合は404が帰ってくる間リトライを続けることになります。

4. アプリパスワードでAPIを呼び出す

あとはこのユーザー名とアプリパスワードをBASIC認証に指定すれば、APIを呼び出せます。

例えばWebDAVを使うならこんな感じに。

$ curl -A "myapp/1.2" -u "testuser:8Ekh...Zu4n" http://example.com/remote.php/dav/files/testuser/path/to/file
6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?