Client device doc
Document client devices, and the mods to the login and register apis to support them.
This commit is contained in:
parent
2b0b5ffeb8
commit
9265b03008
4 changed files with 100 additions and 4 deletions
|
@ -33,6 +33,14 @@ paths:
|
||||||
description: |-
|
description: |-
|
||||||
Authenticates the user, and issues an access token they can
|
Authenticates the user, and issues an access token they can
|
||||||
use to authorize themself in subsequent requests.
|
use to authorize themself in subsequent requests.
|
||||||
|
|
||||||
|
If the client does not supply a ``device_id``, the server must
|
||||||
|
auto-generate one.
|
||||||
|
|
||||||
|
The returned access token must be associated with the ``device_id``
|
||||||
|
supplied by the client or generated by the server. The server may
|
||||||
|
invalidate any access token previously associated with that device. See
|
||||||
|
`Relationship between access tokens and devices`_.
|
||||||
parameters:
|
parameters:
|
||||||
- in: body
|
- in: body
|
||||||
name: body
|
name: body
|
||||||
|
@ -42,7 +50,8 @@ paths:
|
||||||
{
|
{
|
||||||
"type": "m.login.password",
|
"type": "m.login.password",
|
||||||
"user": "cheeky_monkey",
|
"user": "cheeky_monkey",
|
||||||
"password": "ilovebananas"
|
"password": "ilovebananas",
|
||||||
|
"initial_device_display_name": "Jungle Phone"
|
||||||
}
|
}
|
||||||
properties:
|
properties:
|
||||||
type:
|
type:
|
||||||
|
@ -67,6 +76,17 @@ paths:
|
||||||
type: string
|
type: string
|
||||||
description: |-
|
description: |-
|
||||||
Required when ``type`` is ``m.login.token``. The login token.
|
Required when ``type`` is ``m.login.token``. The login token.
|
||||||
|
device_id:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
ID of the client device. If this does not correspond to a
|
||||||
|
known client device, a new device will be created. The server
|
||||||
|
will auto-generate a device_id if this is not specified.
|
||||||
|
initial_device_display_name:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
A display name to assign to the newly-created device. Ignored
|
||||||
|
if ``device_id`` corresponds to a known device.
|
||||||
required: ["type"]
|
required: ["type"]
|
||||||
|
|
||||||
responses:
|
responses:
|
||||||
|
@ -77,7 +97,8 @@ paths:
|
||||||
{
|
{
|
||||||
"user_id": "@cheeky_monkey:matrix.org",
|
"user_id": "@cheeky_monkey:matrix.org",
|
||||||
"access_token": "abc123",
|
"access_token": "abc123",
|
||||||
"home_server": "matrix.org"
|
"home_server": "matrix.org",
|
||||||
|
"device_id": "GHTYAJCE"
|
||||||
}
|
}
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
|
@ -93,6 +114,11 @@ paths:
|
||||||
home_server:
|
home_server:
|
||||||
type: string
|
type: string
|
||||||
description: The hostname of the homeserver on which the account has been registered.
|
description: The hostname of the homeserver on which the account has been registered.
|
||||||
|
device_id:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
ID of the logged-in device. Will be the same as the
|
||||||
|
corresponding parameter in the request, if one was specified.
|
||||||
400:
|
400:
|
||||||
description: |-
|
description: |-
|
||||||
Part of the request was invalid. For example, the login type may not be recognised.
|
Part of the request was invalid. For example, the login type may not be recognised.
|
||||||
|
|
|
@ -42,6 +42,13 @@ paths:
|
||||||
If registration is successful, this endpoint will issue an access token
|
If registration is successful, this endpoint will issue an access token
|
||||||
the client can use to authorize itself in subsequent requests.
|
the client can use to authorize itself in subsequent requests.
|
||||||
|
|
||||||
|
If the client does not supply a ``device_id``, the server must
|
||||||
|
auto-generate one.
|
||||||
|
|
||||||
|
The returned access token must be associated with the ``device_id``
|
||||||
|
supplied by the client or generated by the server. The server may
|
||||||
|
invalidate any access token previously associated with that device. See
|
||||||
|
`Relationship between access tokens and devices`_.
|
||||||
parameters:
|
parameters:
|
||||||
- in: query
|
- in: query
|
||||||
name: kind
|
name: kind
|
||||||
|
@ -84,7 +91,19 @@ paths:
|
||||||
type: string
|
type: string
|
||||||
description: The desired password for the account.
|
description: The desired password for the account.
|
||||||
example: ilovebananas
|
example: ilovebananas
|
||||||
required: ["password"]
|
device_id:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
ID of the client device. If this does not correspond to a
|
||||||
|
known client device, a new device will be created. The server
|
||||||
|
will auto-generate a device_id if this is not specified.
|
||||||
|
example: GHTYAJCE
|
||||||
|
initial_device_display_name:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
A display name to assign to the newly-created device. Ignored
|
||||||
|
if ``device_id`` corresponds to a known device.
|
||||||
|
example: Jungle Phone
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
description: The account has been registered.
|
description: The account has been registered.
|
||||||
|
@ -93,7 +112,8 @@ paths:
|
||||||
{
|
{
|
||||||
"user_id": "@cheeky_monkey:matrix.org",
|
"user_id": "@cheeky_monkey:matrix.org",
|
||||||
"access_token": "abc123",
|
"access_token": "abc123",
|
||||||
"home_server": "matrix.org"
|
"home_server": "matrix.org",
|
||||||
|
"device_id": "GHTYAJCE"
|
||||||
}
|
}
|
||||||
schema:
|
schema:
|
||||||
type: object
|
type: object
|
||||||
|
@ -109,6 +129,11 @@ paths:
|
||||||
home_server:
|
home_server:
|
||||||
type: string
|
type: string
|
||||||
description: The hostname of the homeserver on which the account has been registered.
|
description: The hostname of the homeserver on which the account has been registered.
|
||||||
|
device_id:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
ID of the registered device. Will be the same as the
|
||||||
|
corresponding parameter in the request, if one was specified.
|
||||||
400:
|
400:
|
||||||
description: |-
|
description: |-
|
||||||
Part of the request was invalid. This may include one of the following error codes:
|
Part of the request was invalid. This may include one of the following error codes:
|
||||||
|
|
|
@ -185,6 +185,21 @@ return with a status of 401 and the error code, ``M_MISSING_TOKEN`` or
|
||||||
to choose an appropriate format. Server implementors may like to investigate
|
to choose an appropriate format. Server implementors may like to investigate
|
||||||
`macaroons <macaroon_>`_.
|
`macaroons <macaroon_>`_.
|
||||||
|
|
||||||
|
Relationship between access tokens and devices
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Client `devices`_ are closely related to access tokens. Matrix servers should
|
||||||
|
record which device each access token is assigned to, so that subsequent
|
||||||
|
requests can be handled correctly.
|
||||||
|
|
||||||
|
By default, the `Login`_ and `Registration`_ processes auto-generate a new
|
||||||
|
``device_id``. A client is also free to generate its own ``device_id`` or,
|
||||||
|
provided the user remains the same, reuse a device: in ether case the client
|
||||||
|
should pass the ``device_id`` in the request body. If the client sets the
|
||||||
|
``device_id``, the server will invalidate any access token previously assigned
|
||||||
|
to that device. There is therefore at most one active access token assigned to
|
||||||
|
each device at any one time.
|
||||||
|
|
||||||
User-Interactive Authentication API
|
User-Interactive Authentication API
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
@ -1366,6 +1381,7 @@ have to wait in milliseconds before they can try again.
|
||||||
.. References
|
.. References
|
||||||
|
|
||||||
.. _`macaroon`: http://research.google.com/pubs/pub41892.html
|
.. _`macaroon`: http://research.google.com/pubs/pub41892.html
|
||||||
|
.. _`devices`: ../intro.html#devices
|
||||||
|
|
||||||
.. Links through the external API docs are below
|
.. Links through the external API docs are below
|
||||||
.. =============================================
|
.. =============================================
|
||||||
|
|
|
@ -160,6 +160,35 @@ allocated the account and has the form::
|
||||||
See the `Identifier Grammar`_ section for full details of the structure of
|
See the `Identifier Grammar`_ section for full details of the structure of
|
||||||
user IDs.
|
user IDs.
|
||||||
|
|
||||||
|
|
||||||
|
Devices
|
||||||
|
~~~~~~~
|
||||||
|
|
||||||
|
The Matrix specification has a particular meaning for the term "device". As a
|
||||||
|
user, I might have several devices: a desktop client, some web browsers, an
|
||||||
|
Android device, an iPhone, etc. They broadly relate to a real device in the
|
||||||
|
physical world, but you might have several browsers on a physical device, or
|
||||||
|
several Matrix client applications on a mobile device, each of which would be
|
||||||
|
its own device.
|
||||||
|
|
||||||
|
Devices are used primarily to manage the keys used for end-to-end encryption
|
||||||
|
(each device gets its own copy of the decryption keys), but they also help
|
||||||
|
users manage their access - for instance, by revoking access to particular
|
||||||
|
devices.
|
||||||
|
|
||||||
|
When a user first uses a client, it registers itself as a new device. The
|
||||||
|
longevity of devices might depend on the type of client. A web client will
|
||||||
|
probably drop all of its state on logout, and create a new device every time
|
||||||
|
you log in, to ensure that cryptography keys are not leaked to a new user. In
|
||||||
|
a mobile client, it might be acceptable to reuse the device if a login session
|
||||||
|
expires, provided the user is the same.
|
||||||
|
|
||||||
|
Devices are identified by a ``device_id``, which is unique within the scope of
|
||||||
|
a given user.
|
||||||
|
|
||||||
|
A user may assign a human-readable display name to a device, to help them
|
||||||
|
manage their devices.
|
||||||
|
|
||||||
Events
|
Events
|
||||||
~~~~~~
|
~~~~~~
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue