Fix all naming cases of "identity service"

Fixes https://github.com/matrix-org/matrix-doc/issues/1396

Includes some "homeserver" fixes too. This commit does not include historical documentation or notes.
pull/977/head
Travis Ralston 6 years ago
parent 683072e624
commit cc0badaaa1

@ -35,7 +35,7 @@ paths:
associated with the user's account. associated with the user's account.
This is *not* the same as the list of third party identifiers bound to This is *not* the same as the list of third party identifiers bound to
the user's Matrix ID in Identity Servers. the user's Matrix ID in Identity Services.
Identifiers in this list may be used by the homeserver as, for example, Identifiers in this list may be used by the homeserver as, for example,
identifiers that it will accept to reset the user's account password. identifiers that it will accept to reset the user's account password.
@ -106,13 +106,13 @@ paths:
properties: properties:
client_secret: client_secret:
type: string type: string
description: The client secret used in the session with the Identity Server. description: The client secret used in the session with the Identity Service.
id_server: id_server:
type: string type: string
description: The Identity Server to use. description: The Identity Service to use.
sid: sid:
type: string type: string
description: The session identifier given by the Identity Server. description: The session identifier given by the Identity Service.
required: ["client_secret", "id_server", "sid"] required: ["client_secret", "id_server", "sid"]
bind: bind:
type: boolean type: boolean
@ -138,11 +138,11 @@ paths:
schema: schema:
type: object type: object
403: 403:
description: The credentials could not be verified with the identity server. description: The credentials could not be verified with the identity service.
examples: examples:
application/json: { application/json: {
"errcode": "M_THREEPID_AUTH_FAILED", "errcode": "M_THREEPID_AUTH_FAILED",
"error": "The third party credentials could not be verified by the identity server." "error": "The third party credentials could not be verified by the identity service."
} }
schema: schema:
"$ref": "definitions/errors/error.yaml" "$ref": "definitions/errors/error.yaml"
@ -243,7 +243,7 @@ paths:
description: |- description: |-
Proxies the identity service API ``validate/msisdn/requestToken``, but Proxies the identity service API ``validate/msisdn/requestToken``, but
first checks that the given phone number is **not** already associated first checks that the given phone number is **not** already associated
with an account on this Home Server. This API should be used to request with an account on this homeserver. This API should be used to request
validation tokens when adding a phone number to an account. This API's validation tokens when adding a phone number to an account. This API's
parameters and response are identical to that of the |/register/msisdn/requestToken|_ parameters and response are identical to that of the |/register/msisdn/requestToken|_
endpoint. endpoint.

@ -41,7 +41,7 @@ paths:
0. A default ``m.room.power_levels`` event, giving the room creator 0. A default ``m.room.power_levels`` event, giving the room creator
(and not other members) permission to send state events. Overridden (and not other members) permission to send state events. Overridden
by the ``power_level_content_override`` parameter. by the ``power_level_content_override`` parameter.
1. Events set by the ``preset``. Currently these are the ``m.room.join_rules``, 1. Events set by the ``preset``. Currently these are the ``m.room.join_rules``,
``m.room.history_visibility``, and ``m.room.guest_access`` state events. ``m.room.history_visibility``, and ``m.room.guest_access`` state events.
@ -59,13 +59,13 @@ paths:
======================== ============== ====================== ================ ========= ======================== ============== ====================== ================ =========
Preset ``join_rules`` ``history_visibility`` ``guest_access`` Other Preset ``join_rules`` ``history_visibility`` ``guest_access`` Other
======================== ============== ====================== ================ ========= ======================== ============== ====================== ================ =========
``private_chat`` ``invite`` ``shared`` ``can_join`` ``private_chat`` ``invite`` ``shared`` ``can_join``
``trusted_private_chat`` ``invite`` ``shared`` ``can_join`` All invitees are given the same power level as the room creator. ``trusted_private_chat`` ``invite`` ``shared`` ``can_join`` All invitees are given the same power level as the room creator.
``public_chat`` ``public`` ``shared`` ``forbidden`` ``public_chat`` ``public`` ``shared`` ``forbidden``
======================== ============== ====================== ================ ========= ======================== ============== ====================== ================ =========
The server will create a ``m.room.create`` event in the room with the The server will create a ``m.room.create`` event in the room with the
requesting user as the creator, alongside other keys provided in the requesting user as the creator, alongside other keys provided in the
``creation_content``. ``creation_content``.
operationId: createRoom operationId: createRoom
security: security:
@ -138,7 +138,7 @@ paths:
properties: properties:
id_server: id_server:
type: string type: string
description: The hostname+port of the identity server which should be used for third party identifier lookups. description: The hostname+port of the identity service which should be used for third party identifier lookups.
medium: medium:
type: string type: string
# TODO: Link to identity service spec when it eixsts # TODO: Link to identity service spec when it eixsts
@ -196,7 +196,7 @@ paths:
If unspecified, the server should use the ``visibility`` to determine If unspecified, the server should use the ``visibility`` to determine
which preset to use. A visbility of ``public`` equates to a preset of which preset to use. A visbility of ``public`` equates to a preset of
``public_chat`` and ``private`` visibility equates to a preset of ``public_chat`` and ``private`` visibility equates to a preset of
``private_chat``. ``private_chat``.
is_direct: is_direct:
type: boolean type: boolean

@ -11,14 +11,14 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
title: Identity Server Information title: Identity Service Information
description: |- description: |-
Used by clients to discover identity server information. Used by clients to discover identity service information.
type: object type: object
properties: properties:
base_url: base_url:
type: string type: string
description: The base URL for the identity server for client-server connections. description: The base URL for the identity service for client-server connections.
example: https://identity.example.com example: https://identity.example.com
required: required:
- base_url - base_url

@ -92,7 +92,7 @@ paths:
type: boolean type: boolean
description: |- description: |-
If true, the server binds the email used for authentication to If true, the server binds the email used for authentication to
the Matrix ID with the ID Server. the Matrix ID with the identity service.
example: false example: false
username: username:
type: string type: string
@ -251,7 +251,7 @@ paths:
instead send an email to the user with instructions on how to reset their password. instead send an email to the user with instructions on how to reset their password.
This prevents malicious parties from being able to determine if a given email address This prevents malicious parties from being able to determine if a given email address
has an account on the homeserver in question. has an account on the homeserver in question.
* ``M_SERVER_NOT_TRUSTED`` : The ``id_server`` parameter refers to an ID server * ``M_SERVER_NOT_TRUSTED`` : The ``id_server`` parameter refers to an identity service
that is not trusted by this homeserver. that is not trusted by this homeserver.
examples: examples:
application/json: { application/json: {
@ -307,12 +307,12 @@ paths:
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:
* ``M_THREEPID_IN_USE`` : The phone number is already registered to an account on this server. * ``M_THREEPID_IN_USE`` : The phone number is already registered to an account on this server.
However, if the home server has the ability to send SMS message, it is recommended that the server However, if the homeserver has the ability to send SMS message, it is recommended that the server
instead send an SMS message to the user with instructions on how to reset their password. instead send an SMS message to the user with instructions on how to reset their password.
This prevents malicious parties from being able to determine if a given phone number This prevents malicious parties from being able to determine if a given phone number
has an account on the Home Server in question. has an account on the homeserver in question.
* ``M_SERVER_NOT_TRUSTED`` : The ``id_server`` parameter refers to an ID server * ``M_SERVER_NOT_TRUSTED`` : The ``id_server`` parameter refers to an identity service
that is not trusted by this Home Server. that is not trusted by this homeserver.
examples: examples:
application/json: { application/json: {
"errcode": "M_THREEPID_IN_USE", "errcode": "M_THREEPID_IN_USE",
@ -375,7 +375,7 @@ paths:
description: |- description: |-
Proxies the identity service API ``validate/email/requestToken``, but Proxies the identity service API ``validate/email/requestToken``, but
first checks that the given email address **is** associated with an account first checks that the given email address **is** associated with an account
on this Home Server. This API should be used to request on this homeserver. This API should be used to request
validation tokens when authenticating for the validation tokens when authenticating for the
`account/password` endpoint. This API's parameters and response are `account/password` endpoint. This API's parameters and response are
identical to that of the HS API |/register/email/requestToken|_ except that identical to that of the HS API |/register/email/requestToken|_ except that
@ -437,7 +437,7 @@ paths:
description: |- description: |-
Proxies the identity service API ``validate/msisdn/requestToken``, but Proxies the identity service API ``validate/msisdn/requestToken``, but
first checks that the given phone number **is** associated with an account first checks that the given phone number **is** associated with an account
on this Home Server. This API should be used to request on this homeserver. This API should be used to request
validation tokens when authenticating for the validation tokens when authenticating for the
`account/password` endpoint. This API's parameters and response are `account/password` endpoint. This API's parameters and response are
identical to that of the HS API |/register/msisdn/requestToken|_ except that identical to that of the HS API |/register/msisdn/requestToken|_ except that

@ -36,7 +36,7 @@ paths:
*Note that there are two forms of this API, which are documented separately. *Note that there are two forms of this API, which are documented separately.
This version of the API does not require that the inviter know the Matrix This version of the API does not require that the inviter know the Matrix
identifier of the invitee, and instead relies on third party identifiers. identifier of the invitee, and instead relies on third party identifiers.
The homeserver uses an identity server to perform the mapping from The homeserver uses an identity service to perform the mapping from
third party identifier to a Matrix identifier. The other is documented in the* third party identifier to a Matrix identifier. The other is documented in the*
`joining rooms section`_. `joining rooms section`_.
@ -47,31 +47,31 @@ paths:
Only users currently in a particular room can invite other users to Only users currently in a particular room can invite other users to
join that room. join that room.
If the identity server did know the Matrix user identifier for the If the identity service did know the Matrix user identifier for the
third party identifier, the homeserver will append a ``m.room.member`` third party identifier, the homeserver will append a ``m.room.member``
event to the room. event to the room.
If the identity server does not know a Matrix user identifier for the If the identity service does not know a Matrix user identifier for the
passed third party identifier, the homeserver will issue an invitation passed third party identifier, the homeserver will issue an invitation
which can be accepted upon providing proof of ownership of the third which can be accepted upon providing proof of ownership of the third
party identifier. This is achieved by the identity server generating a party identifier. This is achieved by the identity service generating a
token, which it gives to the inviting homeserver. The homeserver will token, which it gives to the inviting homeserver. The homeserver will
add an ``m.room.third_party_invite`` event into the graph for the room, add an ``m.room.third_party_invite`` event into the graph for the room,
containing that token. containing that token.
When the invitee binds the invited third party identifier to a Matrix When the invitee binds the invited third party identifier to a Matrix
user ID, the identity server will give the user a list of pending user ID, the identity service will give the user a list of pending
invitations, each containing: invitations, each containing:
- The room ID to which they were invited - The room ID to which they were invited
- The token given to the homeserver - The token given to the homeserver
- A signature of the token, signed with the identity server's private key - A signature of the token, signed with the identity service's private key
- The matrix user ID who invited them to the room - The matrix user ID who invited them to the room
If a token is requested from the identity server, the homeserver will If a token is requested from the identity service, the homeserver will
append a ``m.room.third_party_invite`` event to the room. append a ``m.room.third_party_invite`` event to the room.
.. _joining rooms section: `invite-by-user-id-endpoint`_ .. _joining rooms section: `invite-by-user-id-endpoint`_
@ -98,7 +98,7 @@ paths:
properties: properties:
id_server: id_server:
type: string type: string
description: The hostname+port of the identity server which should be used for third party identifier lookups. description: The hostname+port of the identity service which should be used for third party identifier lookups.
medium: medium:
type: string type: string
# TODO: Link to identity service spec when it eixsts # TODO: Link to identity service spec when it eixsts

@ -54,7 +54,7 @@ paths:
description: Information about the homeserver to connect to. description: Information about the homeserver to connect to.
"$ref": "definitions/wellknown/homeserver.yaml" "$ref": "definitions/wellknown/homeserver.yaml"
m.identity_server: m.identity_server:
description: Optional. Information about the identity server to connect to. description: Optional. Information about the identity service to connect to.
"$ref": "definitions/wellknown/identity_server.yaml" "$ref": "definitions/wellknown/identity_server.yaml"
additionalProperties: additionalProperties:
description: Application-dependent keys using Java package naming convention. description: Application-dependent keys using Java package naming convention.

@ -200,9 +200,9 @@ paths:
Notifies the server that a third party identifier has been bound to one Notifies the server that a third party identifier has been bound to one
of its users. of its users.
description: |- description: |-
Used by Identity Servers to notify the homeserver that one of its users Used by Identity Services to notify the homeserver that one of its users
has bound a third party identifier successfully, including any pending has bound a third party identifier successfully, including any pending
room invites the Identity Server has been made aware of. room invites the Identity Service has been made aware of.
operationId: onBindThirdPartyIdentifier operationId: onBindThirdPartyIdentifier
parameters: parameters:
- in: body - in: body
@ -262,9 +262,9 @@ paths:
# also make sure it isn't lying about anything, like the key version # also make sure it isn't lying about anything, like the key version
signed: signed:
type: object type: object
title: Identity Server Signatures title: Identity Service Signatures
description: |- description: |-
Signature from the Identity Server using a long-term private Signature from the Identity Service using a long-term private
key. key.
properties: properties:
mxid: mxid:
@ -280,14 +280,14 @@ paths:
example: "Hello World" example: "Hello World"
signatures: signatures:
type: object type: object
title: Identity Server Signature title: Identity Service Signature
description: |- description: |-
The signature from the identity server. The ``string`` key The signature from the identity service. The ``string`` key
is the identity server's domain name, such as vector.im is the identity service's domain name, such as vector.im
additionalProperties: additionalProperties:
type: object type: object
title: Identity Server Domain Signature title: Identity Service Domain Signature
description: The signature for the identity server. description: The signature for the identity service.
properties: properties:
"ed25519:0": "ed25519:0":
type: string type: string

@ -76,7 +76,7 @@ r0.3.0
- Spec clarifications: - Spec clarifications:
- Add endpoints and logic for invites and third-party invites to the federation - Add endpoints and logic for invites and third-party invites to the federation
spec and update the JSON of the request sent by the identity server upon 3PID spec and update the JSON of the request sent by the identity service upon 3PID
binding binding
(`#997 <https://github.com/matrix-org/matrix-doc/pull/997>`_) (`#997 <https://github.com/matrix-org/matrix-doc/pull/997>`_)
- Fix "membership" property on third-party invite upgrade example - Fix "membership" property on third-party invite upgrade example

@ -69,10 +69,10 @@ have English as their first language.
Prefer British English (colour, -ise) to American English. Prefer British English (colour, -ise) to American English.
The word "homeserver" is spelt thus (rather than "home server", "Homeserver", The word "homeserver" is spelt thus (rather than "home server", "Homeserver",
or (argh) "Home Server"). However, an identity server is two words. or (argh) "Home Server"). However, an identity service is two words.
.. Rationale: "homeserver" distinguishes from a "home server" which is a server .. Rationale: "homeserver" distinguishes from a "home server" which is a server
you have at home. "Identity server" is clear, whereas "identityserver" is you have at home. "Identity Service" is clear, whereas "identityservice" is
horrible. horrible.
Lists should: Lists should:
@ -91,9 +91,9 @@ When writing OpenAPI specifications for the API endpoints, follow these rules:
* ``description``: a longer description of the behaviour of this API, written * ``description``: a longer description of the behaviour of this API, written
in complete sentences. Use multiple paragraphs if necessary. in complete sentences. Use multiple paragraphs if necessary.
Example: Example:
This API sends an event to the room. The server must ensure that the user This API sends an event to the room. The server must ensure that the user
has permission to post events to this room. has permission to post events to this room.
@ -106,7 +106,7 @@ When writing OpenAPI specifications for the API endpoints, follow these rules:
The description is also the place to define default values for optional The description is also the place to define default values for optional
properties. Use the wording "Defaults to X [if unspecified]." properties. Use the wording "Defaults to X [if unspecified]."
Some descriptions start with the word "Optional" to explicitly mark optional Some descriptions start with the word "Optional" to explicitly mark optional
properties and parameters. This is redundant. Instead, use the ``required`` properties and parameters. This is redundant. Instead, use the ``required``
property to mark those that are required. property to mark those that are required.

@ -1,7 +1,7 @@
# How to release a specification # How to release a specification
There are several specifications that belong to matrix, such as the client-server There are several specifications that belong to matrix, such as the client-server
specification, server-server specification, and identity server specification. Each specification, server-server specification, and identity service specification. Each
of these gets released independently of each other with their own version numbers. of these gets released independently of each other with their own version numbers.
Once a specification is ready for release, a branch should be created to track the Once a specification is ready for release, a branch should be created to track the
@ -34,7 +34,7 @@ The remainder of the process is as follows:
### Creating a release for a brand-new specification ### Creating a release for a brand-new specification
Some specifications may not have ever had a release, and therefore need a bit more work Some specifications may not have ever had a release, and therefore need a bit more work
to become ready. to become ready.
1. Activate your Python 3 virtual environment. 1. Activate your Python 3 virtual environment.
1. Having checked out the new release branch, navigate your way over to `./changelogs`. 1. Having checked out the new release branch, navigate your way over to `./changelogs`.

@ -145,7 +145,7 @@ Some requests have unique error codes:
Sent when a threepid given to an API cannot be used because no record matching the threepid was found. Sent when a threepid given to an API cannot be used because no record matching the threepid was found.
:``M_SERVER_NOT_TRUSTED``: :``M_SERVER_NOT_TRUSTED``:
The client's request used a third party server, eg. ID server, that this server does not trust. The client's request used a third party server, eg. identity service, that this server does not trust.
:``M_UNSUPPORTED_ROOM_VERSION``: :``M_UNSUPPORTED_ROOM_VERSION``:
The client's request to create a room used a room version that the server does not support. The client's request to create a room used a room version that the server does not support.
@ -257,7 +257,7 @@ specify parameter values. The flow for this method is as follows:
points to a valid homeserver. points to a valid homeserver.
f. If the ``m.identity_server`` property is present, extract the f. If the ``m.identity_server`` property is present, extract the
``base_url`` value for use as the base URL of the identity server. ``base_url`` value for use as the base URL of the identity service.
Validation for this URL is done as in the step above, but using Validation for this URL is done as in the step above, but using
``/_matrix/identity/api/v1`` as the endpoint to connect to. If the ``/_matrix/identity/api/v1`` as the endpoint to connect to. If the
``m.identity_server`` property is present, but does not have a ``m.identity_server`` property is present, but does not have a
@ -685,7 +685,7 @@ the auth code. Homeservers can choose any path for the ``redirect URI``. Once
the OAuth flow has completed, the client retries the request with the session the OAuth flow has completed, the client retries the request with the session
only, as above. only, as above.
Email-based (identity server) Email-based (identity service)
<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
:Type: :Type:
``m.login.email.identity`` ``m.login.email.identity``
@ -705,9 +705,9 @@ To use this authentication type, clients should submit an auth dict as follows:
"type": "m.login.email.identity", "type": "m.login.email.identity",
"threepidCreds": [ "threepidCreds": [
{ {
"sid": "<identity server session id>", "sid": "<identity service session id>",
"client_secret": "<identity server client secret>", "client_secret": "<identity service client secret>",
"id_server": "<url of identity server authed with, e.g. 'matrix.org:8090'>" "id_server": "<url of identity service authed with, e.g. 'matrix.org:8090'>"
} }
], ],
"session": "<session ID>" "session": "<session ID>"
@ -995,7 +995,7 @@ Adding Account Administrative Contact Information
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A homeserver may keep some contact information for administrative use. A homeserver may keep some contact information for administrative use.
This is independent of any information kept by any Identity Servers. This is independent of any information kept by any Identity Services.
{{administrative_contact_cs_http_api}} {{administrative_contact_cs_http_api}}

@ -107,7 +107,7 @@ The functionality that Matrix provides includes:
- Managing user accounts (registration, login, logout) - Managing user accounts (registration, login, logout)
- Use of 3rd Party IDs (3PIDs) such as email addresses, phone numbers, - Use of 3rd Party IDs (3PIDs) such as email addresses, phone numbers,
Facebook accounts to authenticate, identify and discover users on Matrix. Facebook accounts to authenticate, identify and discover users on Matrix.
- Trusted federation of Identity servers for: - Trusted federation of Identity Services for:
+ Publishing user public keys for PKI + Publishing user public keys for PKI
+ Mapping of 3PIDs to Matrix IDs + Mapping of 3PIDs to Matrix IDs
@ -386,7 +386,7 @@ network accounts and phone numbers to their user ID. Linking 3PIDs creates a
mapping from a 3PID to a user ID. This mapping can then be used by Matrix mapping from a 3PID to a user ID. This mapping can then be used by Matrix
users in order to discover the user IDs of their contacts. users in order to discover the user IDs of their contacts.
In order to ensure that the mapping from 3PID to user ID is genuine, a globally In order to ensure that the mapping from 3PID to user ID is genuine, a globally
federated cluster of trusted "Identity Servers" (IS) are used to verify the 3PID federated cluster of trusted "Identity Services" (IS) are used to verify the 3PID
and persist and replicate the mappings. and persist and replicate the mappings.
Usage of an IS is not required in order for a client application to be part of Usage of an IS is not required in order for a client application to be part of

@ -24,14 +24,14 @@ There are two flows here; one if a Matrix user ID is known for the third party
identifier, and one if not. Either way, the client calls ``/invite`` with the identifier, and one if not. Either way, the client calls ``/invite`` with the
details of the third party identifier. details of the third party identifier.
The homeserver asks the identity server whether a Matrix user ID is known for The homeserver asks the identity service whether a Matrix user ID is known for
that identifier: that identifier:
- If it is, an invite is simply issued for that user. - If it is, an invite is simply issued for that user.
- If it is not, the homeserver asks the identity server to record the details of - If it is not, the homeserver asks the identity service to record the details of
the invitation, and to notify the invitee's homeserver of this pending invitation if it gets the invitation, and to notify the invitee's homeserver of this pending invitation if it gets
a binding for this identifier in the future. The identity server returns a token a binding for this identifier in the future. The identity service returns a token
and public key to the inviting homeserver. and public key to the inviting homeserver.
When the invitee's homeserver receives the notification of the binding, it When the invitee's homeserver receives the notification of the binding, it
@ -57,7 +57,7 @@ Server behaviour
---------------- ----------------
Upon receipt of an ``/invite``, the server is expected to look up the third party Upon receipt of an ``/invite``, the server is expected to look up the third party
identifier with the provided identity server. If the lookup yields a result for identifier with the provided identity service. If the lookup yields a result for
a Matrix User ID then the normal invite process can be initiated. This process a Matrix User ID then the normal invite process can be initiated. This process
ends up looking like this: ends up looking like this:
@ -87,7 +87,7 @@ ends up looking like this:
However, if the lookup does not yield a bound User ID, the homeserver must store However, if the lookup does not yield a bound User ID, the homeserver must store
the invite on the identity server and emit a valid ``m.room.third_party_invite`` the invite on the identity service and emit a valid ``m.room.third_party_invite``
event to the room. This process ends up looking like this: event to the room. This process ends up looking like this:
:: ::
@ -125,7 +125,7 @@ All homeservers MUST verify the signature in the event's
``content.third_party_invite.signed`` object. ``content.third_party_invite.signed`` object.
The third party user will then need to verify their identity, which results in The third party user will then need to verify their identity, which results in
a call from the Identity Server to the homeserver that bound the third party a call from the Identity Service to the homeserver that bound the third party
identifier to a user. The homeserver then exchanges the ``m.room.third_party_invite`` identifier to a user. The homeserver then exchanges the ``m.room.third_party_invite``
event in the room for a complete ``m.room.member`` event for ``membership: invite`` event in the room for a complete ``m.room.member`` event for ``membership: invite``
for the user that has bound the third party identifier. for the user that has bound the third party identifier.
@ -142,7 +142,7 @@ the room. They may, however, indicate to their clients that a member's
membership is questionable. membership is questionable.
For example, given H1, H2, and H3 as homeservers, UserA as a user of H1, and an For example, given H1, H2, and H3 as homeservers, UserA as a user of H1, and an
identity server IS, the full sequence for a third party invite would look like identity service IS, the full sequence for a third party invite would look like
the following. This diagram assumes H1 and H2 are residents of the room while the following. This diagram assumes H1 and H2 are residents of the room while
H3 is attempting to join. H3 is attempting to join.
@ -207,15 +207,15 @@ H3 is attempting to join.
Note that when H1 sends the ``m.room.member`` event to H2 and H3 it does not Note that when H1 sends the ``m.room.member`` event to H2 and H3 it does not
have to block on either server's receipt of the event. Likewise, H1 may complete have to block on either server's receipt of the event. Likewise, H1 may complete
the ``/exchange_third_party_invite/:roomId`` request at the same time as sending the ``/exchange_third_party_invite/:roomId`` request at the same time as sending
the ``m.room.member`` event to H2 and H3. Additionally, H3 may complete the the ``m.room.member`` event to H2 and H3. Additionally, H3 may complete the
``/3pid/onbind`` request it got from IS at any time - the completion is not shown ``/3pid/onbind`` request it got from IS at any time - the completion is not shown
in the diagram. in the diagram.
H1 MUST verify the request from H3 to ensure the ``signed`` property is correct H1 MUST verify the request from H3 to ensure the ``signed`` property is correct
as well as the ``key_validity_url`` as still being valid. This is done by making as well as the ``key_validity_url`` as still being valid. This is done by making
a request to the `Identity Server /isvalid`_ endpoint, using the provided URL a request to the `Identity Service /isvalid`_ endpoint, using the provided URL
rather than constructing a new one. The query string and response for the provided rather than constructing a new one. The query string and response for the provided
URL must match the Identity Server specification. URL must match the Identity Service specification.
The reason that no other homeserver may reject the event based on checking The reason that no other homeserver may reject the event based on checking
``key_validity_url`` is that we must ensure event acceptance is deterministic. ``key_validity_url`` is that we must ensure event acceptance is deterministic.
@ -236,22 +236,22 @@ ID and a third party identifier is hard. In particular, being able to look up
all third party identifiers from a matrix user ID (and accordingly, being able all third party identifiers from a matrix user ID (and accordingly, being able
to link each third party identifier) should be avoided wherever possible. to link each third party identifier) should be avoided wherever possible.
To this end, the third party identifier is not put in any event, rather an To this end, the third party identifier is not put in any event, rather an
opaque display name provided by the identity server is put into the events. opaque display name provided by the identity service is put into the events.
Clients should not remember or display third party identifiers from invites, Clients should not remember or display third party identifiers from invites,
other than for the use of the inviter themself. other than for the use of the inviter themself.
Homeservers are not required to trust any particular identity server(s). It is Homeservers are not required to trust any particular identity service(s). It is
generally a client's responsibility to decide which identity servers it trusts, generally a client's responsibility to decide which identity services it trusts,
not a homeserver's. Accordingly, this API takes identity servers as input from not a homeserver's. Accordingly, this API takes identity services as input from
end users, and doesn't have any specific trusted set. It is possible some end users, and doesn't have any specific trusted set. It is possible some
homeservers may want to supply defaults, or reject some identity servers for homeservers may want to supply defaults, or reject some identity services for
*its* users, but no homeserver is allowed to dictate which identity servers *its* users, but no homeserver is allowed to dictate which identity services
*other* homeservers' users trust. *other* homeservers' users trust.
There is some risk of denial of service attacks by flooding homeservers or There is some risk of denial of service attacks by flooding homeservers or
identity servers with many requests, or much state to store. Defending against identity services with many requests, or much state to store. Defending against
these is left to the implementer's discretion. these is left to the implementer's discretion.
.. _`Identity Server /isvalid`: ../identity_service/unstable.html#get-matrix-identity-api-v1-pubkey-isvalid .. _`Identity Service /isvalid`: ../identity_service/unstable.html#get-matrix-identity-api-v1-pubkey-isvalid

@ -844,35 +844,35 @@ When an user wants to invite another user in a room but doesn't know the Matrix
ID to invite, they can do so using a third-party identifier (e.g. an e-mail or a ID to invite, they can do so using a third-party identifier (e.g. an e-mail or a
phone number). phone number).
This identifier and its bindings to Matrix IDs are verified by an identity server This identifier and its bindings to Matrix IDs are verified by an identity service
implementing the `Identity Service API`_. implementing the `Identity Service API`_.
Cases where an association exists for a third-party identifier Cases where an association exists for a third-party identifier
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If the third-party identifier is already bound to a Matrix ID, a lookup request If the third-party identifier is already bound to a Matrix ID, a lookup request
on the identity server will return it. The invite is then processed by the inviting on the identity service will return it. The invite is then processed by the inviting
homeserver as a standard ``m.room.member`` invite event. This is the simplest case. homeserver as a standard ``m.room.member`` invite event. This is the simplest case.
Cases where an association doesn't exist for a third-party identifier Cases where an association doesn't exist for a third-party identifier
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If the third-party identifier isn't bound to any Matrix ID, the inviting If the third-party identifier isn't bound to any Matrix ID, the inviting
homeserver will request the identity server to store an invite for this identifier homeserver will request the identity service to store an invite for this identifier
and to deliver it to whoever binds it to its Matrix ID. It will also send a and to deliver it to whoever binds it to its Matrix ID. It will also send a
``m.room.third_party_invite`` event in the room to specify a display name, a token ``m.room.third_party_invite`` event in the room to specify a display name, a token
and public keys the identity server provided as a response to the invite storage and public keys the identity service provided as a response to the invite storage
request. request.
When a third-party identifier with pending invites gets bound to a Matrix ID, When a third-party identifier with pending invites gets bound to a Matrix ID,
the identity server will send a POST request to the ID's homeserver as described the identity service will send a POST request to the ID's homeserver as described
in the `Invitation Storage`_ section of the Identity Service API. in the `Invitation Storage`_ section of the Identity Service API.
The following process applies for each invite sent by the identity server: The following process applies for each invite sent by the identity service:
The invited homeserver will create a ``m.room.member`` invite event containing The invited homeserver will create a ``m.room.member`` invite event containing
a special ``third_party_invite`` section containing the token and a signed object, a special ``third_party_invite`` section containing the token and a signed object,
both provided by the identity server. both provided by the identity service.
If the invited homeserver is in the room the invite came from, it can auth the If the invited homeserver is in the room the invite came from, it can auth the
event and send it. event and send it.
@ -894,14 +894,14 @@ server.
To do so, it will fetch from the room's state events the ``m.room.third_party_invite`` To do so, it will fetch from the room's state events the ``m.room.third_party_invite``
event for which the state key matches with the value for the ``token`` key in the event for which the state key matches with the value for the ``token`` key in the
``third_party_invite`` object from the ``m.room.member`` event's content to fetch the ``third_party_invite`` object from the ``m.room.member`` event's content to fetch the
public keys initially delivered by the identity server that stored the invite. public keys initially delivered by the identity service that stored the invite.
It will then use these keys to verify that the ``signed`` object (in the It will then use these keys to verify that the ``signed`` object (in the
``third_party_invite`` object from the ``m.room.member`` event's content) was ``third_party_invite`` object from the ``m.room.member`` event's content) was
signed by the same identity server. signed by the same identity service.
Since this ``signed`` object can only be delivered once in the POST request Since this ``signed`` object can only be delivered once in the POST request
emitted by the identity server upon binding between the third-party identifier emitted by the identity service upon binding between the third-party identifier
and the Matrix ID, and contains the invited user's Matrix ID and the token and the Matrix ID, and contains the invited user's Matrix ID and the token
delivered when the invite was stored, this verification will prove that the delivered when the invite was stored, this verification will prove that the
``m.room.member`` invite event comes from the user owning the invited third-party ``m.room.member`` invite event comes from the user owning the invited third-party

Loading…
Cancel
Save