annotate Sphinx/source/plugins/authorization.rst @ 1007:7fbd7a6a1d56

added note about deprecation of advanced authorization plugin
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 01 Jan 2024 13:28:17 +0100
parents 17bf6fafb884
children a1d28570ef23
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
96
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 .. _authorization:
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3
851
f282da89c1c1 auth plugin not deprecated anymore
Alain Mazy <am@osimis.io>
parents: 761
diff changeset
4 Advanced authorization plugin
f282da89c1c1 auth plugin not deprecated anymore
Alain Mazy <am@osimis.io>
parents: 761
diff changeset
5 =============================
96
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
6
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 .. contents::
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8
1004
17bf6fafb884 added links to uclouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 993
diff changeset
9 This **official plugin** extends Orthanc with an advanced
97
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
10 authorization mechanism. For each incoming REST request to some URI,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
11 the plugin will query a Web service to know whether the access is
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
12 granted to the user. If access is not granted, the HTTP status code is
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
13 set to ``403`` (Forbidden).
96
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14
1007
7fbd7a6a1d56 added note about deprecation of advanced authorization plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1004
diff changeset
15 **Status:** This plugin was `deprecated
7fbd7a6a1d56 added note about deprecation of advanced authorization plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1004
diff changeset
16 <https://discourse.orthanc-server.org/t/advanced-authorization-plugin-vs-remote-access/1859/5?u=jodogne>`__
7fbd7a6a1d56 added note about deprecation of advanced authorization plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1004
diff changeset
17 between 2020 and 2022, but its active development has been resumed
7fbd7a6a1d56 added note about deprecation of advanced authorization plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1004
diff changeset
18 since May 2022.
7fbd7a6a1d56 added note about deprecation of advanced authorization plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1004
diff changeset
19
96
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20
921
33e8cb14142f auth plugin fix
Alain Mazy <am@osimis.io>
parents: 920
diff changeset
21 How to get it ?
33e8cb14142f auth plugin fix
Alain Mazy <am@osimis.io>
parents: 920
diff changeset
22 ---------------
33e8cb14142f auth plugin fix
Alain Mazy <am@osimis.io>
parents: 920
diff changeset
23
991
1316bc62b5d5 migration to UCLouvain servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 950
diff changeset
24 The source code is available on `Mercurial <https://orthanc.uclouvain.be/hg/orthanc-authorization/>`__.
96
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25
921
33e8cb14142f auth plugin fix
Alain Mazy <am@osimis.io>
parents: 920
diff changeset
26 Binaries are included in:
96
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
27
921
33e8cb14142f auth plugin fix
Alain Mazy <am@osimis.io>
parents: 920
diff changeset
28 - The `osimis/orthanc Docker image <https://hub.docker.com/r/osimis/orthanc>`__
33e8cb14142f auth plugin fix
Alain Mazy <am@osimis.io>
parents: 920
diff changeset
29 - The `Windows Installer <https://www.orthanc-server.com/download-windows.php>`__
993
05b106383b2a migration to UCLouvain servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 991
diff changeset
30 - The `MacOS packages <https://www.orthanc-server.com/static.php?page=download-mac>`__
96
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
31
991
1316bc62b5d5 migration to UCLouvain servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 950
diff changeset
32 Release notes are available `here <https://orthanc.uclouvain.be/hg/orthanc-authorization/file/tip/NEWS>`__.
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
33
921
33e8cb14142f auth plugin fix
Alain Mazy <am@osimis.io>
parents: 920
diff changeset
34 Compilation instructions are available below.
33e8cb14142f auth plugin fix
Alain Mazy <am@osimis.io>
parents: 920
diff changeset
35
96
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
36
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
37 Usage
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
38 -----
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
39
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
40 .. highlight:: json
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
41
921
33e8cb14142f auth plugin fix
Alain Mazy <am@osimis.io>
parents: 920
diff changeset
42 Once Orthanc is installed, you must change the :ref:`configuration file
96
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
43 <configuration>` to tell Orthanc where it can find the plugin: This is
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
44 done by properly modifying the ``Plugins`` option. You could for
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
45 instance use the following configuration file::
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
46
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47 {
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
48 "Name" : "MyOrthanc",
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
49 [...]
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
50 "Plugins" : [
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
51 "/home/user/OrthancAuthorization/Build/libOrthancAuthorization.so"
97
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
52 ],
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
53 "Authorization" : {
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
54 "WebServiceRootUrl" : "http://localhost:8000/",
878
2e3493d618ad auth 0.3.0
Alain Mazy <am@osimis.io>
parents: 851
diff changeset
55 "WebServiceUsername": "my-user",
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
56 "WebServicePassword": "my-password"
97
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
57 }
96
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
58 }
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
59
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
60 Orthanc must of course be restarted after the modification of its
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
61 configuration file.
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
62
97
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
63
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
64 Web Service
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
65 -----------
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
66
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
67 This section describes how a Web service suitable for the
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
68 authorization plugin can be designed.
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
69
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
70
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
71 Incoming request
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
72 ^^^^^^^^^^^^^^^^
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
73
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
74 For each HTTP/REST request that Orthanc receives, the plugin will
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
75 issue a set of HTTP ``POST`` requests against the Web service that is
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
76 specified in the configuration file (in the basic configuration file
945
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
77 above, the Web service listening at ``http://localhost:8000/tokens/validate`` is
97
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
78 used). The body of each of those ``POST`` requests is a JSON file
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
79 similar to the following one::
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
80
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
81 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
82 "dicom-uid" : "123ABC",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
83 "level" : "patient",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
84 "method" : "get",
878
2e3493d618ad auth 0.3.0
Alain Mazy <am@osimis.io>
parents: 851
diff changeset
85 "orthanc-id" : "6eeded74-75005003-c3ae9738-d4a06a4f-6beedeb8",
945
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
86 "server-id": null,
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
87 "uri": null
97
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
88 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
89
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
90 In this example, the user is accessing an URI that is related to some
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
91 DICOM resource, namely a patient whose DICOM identifier is
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
92 ``123ABC``. In such a case, the following fields will be set in the
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
93 JSON body:
97
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
94
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
95 * The ``level`` field specifies which type of resource the user is
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
96 accessing, according to the :ref:`DICOM model of the real world
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
97 <model-world>`. This field can be set to ``patient``, ``study``,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
98 ``series``, or ``instance``.
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
99 * The ``method`` field specifies which HTTP method is used by the
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
100 to-be-authorized request. It can be set to ``get``, ``post``,
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
101 ``delete``, or ``put``.
97
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
102 * The ``dicom-uid`` field gives the :ref:`DICOM identifier
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
103 <dicom-identifiers>` of the resource that is accessed. If the
97
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
104 resource is a patient, this field contains the ``PatientID`` DICOM
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
105 tag. For a study, it contains its ``StudyInstanceUID``. For a
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
106 series, it contains its ``SeriesInstanceUID``. For an instance, it
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
107 contains its ``SOPInstanceUID``.
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
108 * The ``orthanc-id`` field gives the :ref:`Orthanc identifier
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
109 <orthanc-ids>` of the resource.
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
110 * The ``server-id`` field contains the value of the ``WebServiceIdentifier``
878
2e3493d618ad auth 0.3.0
Alain Mazy <am@osimis.io>
parents: 851
diff changeset
111 configuration or ``null`` if this configuration is not defined. This allows
2e3493d618ad auth 0.3.0
Alain Mazy <am@osimis.io>
parents: 851
diff changeset
112 the WebService to identity which Orthanc instance is calling it (new in v 0.3.0).
97
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
113
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
114 When the user accesses a lower-level resource in the DICOM hierarchy
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
115 (a study, a series or an instance), the authorization plugin will
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
116 issue one separate call to the Web service for each level of the
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
117 hierarchy. For instance, here are the 3 successive requests that are
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
118 issued when accessing some series::
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
119
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
120 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
121 "dicom-uid" : "123ABC",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
122 "level" : "patient",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
123 "method" : "get",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
124 "orthanc-id" : "6eeded74-75005003-c3ae9738-d4a06a4f-6beedeb8"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
125 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
126 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
127 "dicom-uid" : "1.3.51.0.1.1.192.168.29.133.1681753.1681732",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
128 "level" : "study",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
129 "method" : "get",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
130 "orthanc-id" : "6e2c0ec2-5d99c8ca-c1c21cee-79a09605-68391d12"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
131 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
132 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
133 "dicom-uid" : "1.3.12.2.1107.5.2.33.37097.2012041612474981424569674.0.0.0",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
134 "level" : "series",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
135 "method" : "get",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
136 "orthanc-id" : "6ca4c9f3-5e895cb3-4d82c6da-09e060fe-9c59f228"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
137 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
138
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
139 It the user is accessing a URI that is not directly related to an
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
140 individual DICOM resource, the JSON body will look as follows::
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
141
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
142 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
143 "level" : "system",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
144 "method" : "get",
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
145 "uri" : "/changes"
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
146 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
147
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
148 In such a situation, the following fields are set:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
149
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
150 * The ``level`` field is always set to ``system``.
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
151 * The ``method`` field is the same as above.
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
152 * The ``uri`` field provides the URI that was accessed by the user.
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
153
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
154 **Important note:** The plugin will transparently parse the URIs of
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
155 the core :ref:`REST API of Orthanc <rest>`, of the :ref:`Web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
156 plugin <webviewer>`, of the :ref:`DICOMweb plugin <dicomweb>`, and of
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
157 the :ref:`whole-slide imaging plugin <wsi>`. Unrecognized URIs (such
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
158 as those introduced by other plugins) will be handled as a ``system``
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
159 call. It is possible to introduce parsing support for more plugins by
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
160 modifying the ``DefaultAuthorizationParser`` C++ class in the source
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
161 code of the plugin.
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
162
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
163
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
164 Expected answer
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
165 ^^^^^^^^^^^^^^^
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
166
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
167 The Web service must answer by sending a JSON file that tells whether
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
168 the access is granted or not to the user. Here is a sample answer::
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
169
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
170 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
171 "granted": true,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
172 "validity" : 5
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
173 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
174
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
175 Here is a description of these two fields:
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
176
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
177 * ``granted`` tells whether access to the resource is granted
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
178 (``true``) or not granted (``false``). In the case the user is
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
179 accessing a DICOM resource, the access to *all* the levels of the
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
180 hierarchy above this resource must be granted (logical conjunction
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
181 over the levels).
97
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
182 * ``validity`` tells the authorization plugin for how many seconds the
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
183 result of the Web service must be cached. If set to ``0`` second,
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
184 the cache entry will never expire.
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
185
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
186 **Note:** The source code of the plugin contains a `basic example
991
1316bc62b5d5 migration to UCLouvain servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 950
diff changeset
187 <https://orthanc.uclouvain.be/hg/orthanc-authorization/file/default/Resources/TestService.js>`__
97
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
188 of such a Web service written in node.js.
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
189
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
190
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
191 Authentication tokens
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
192 ^^^^^^^^^^^^^^^^^^^^^
96
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
193
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
194 It is obviously desirable to limit access to the resources depending
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
195 on the user that is logged in. Real-life Web framework such as Django
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
196 would send the identity of the authenticated user either as an HTTP
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
197 header, or as an additional argument for ``GET`` requests. The
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
198 authorization plugin allows to forward these authentication tokens to
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
199 the Web service.
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
200
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
201 To configure the authentication plugin to use some HTTP header, one
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
202 must provide the option ``TokenHttpHeaders`` the configuration file of
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
203 Orthanc as follows::
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
204
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
205 {
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
206 "Name" : "MyOrthanc",
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
207 [...]
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
208 "Authorization" : {
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
209 "WebService" : "http://localhost:8000/",
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
210 "TokenHttpHeaders" : [ "token" ]
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
211 }
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
212 }
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
213
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
214 .. highlight:: text
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
215
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
216 In such a situation, if some HTTP client issues the following call::
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
217
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
218 # curl -H 'token: my-token' http://localhost:8042/patients/6eeded74-75005003-c3ae9738-d4a06a4f-6beedeb8
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
219
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
220 .. highlight:: json
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
221
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
222 Here is the JSON body the Web service would receive::
96
750f7ab733c1 start documentation of authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
223
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
224 {
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
225 "dicom-uid" : "123ABC",
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
226 "level" : "patient",
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
227 "method" : "get",
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
228 "orthanc-id" : "6eeded74-75005003-c3ae9738-d4a06a4f-6beedeb8",
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
229 "token-key" : "token",
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
230 "token-value" : "my-token"
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
231 }
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
232
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
233 .. highlight:: text
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
234
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
235 Note how the key and the value of the authentication token stored as a
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
236 HTTP header are forwarded to the Web service.
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
237
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
238 The same mechanism can be used if the authentication token is provided
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
239 as some ``GET`` argument by setting the ``TokenGetArguments``
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
240 configuration option::
97
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
241
945
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
242 # curl http://localhost:8042/patients/6eeded74-75005003-c3ae9738-d4a06a4f-6beedeb8?token=my-token
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
243 {
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
244 "dicom-uid" : "123ABC",
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
245 "level" : "patient",
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
246 "method" : "get",
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
247 "orthanc-id" : "6eeded74-75005003-c3ae9738-d4a06a4f-6beedeb8",
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
248 "token-key" : "token",
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
249 "token-value" : "my-token"
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
250 }
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
251
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
252 **Note 1:** It is allowed to provide a list of HTTP tokens or a list
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
253 of ``GET`` arguments in the configuration options. In this case, the
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
254 authorization plugin will loop over all the available authentication
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
255 tokens, until it finds one for which the access is granted (logical
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
256 disjunction over the authentication tokens).
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
257
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
258 **Note 2:** The cache entry that remembers whether some access was
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
259 granted in the past, depends on the value of the token.
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
260
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
261 **Note 3:** The support of authentication tokens provided as ``GET``
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
262 arguments requires a version of Orthanc that is above 1.2.1.
97
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
263
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
264
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
265 Full configuration
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
266 ------------------
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
267
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
268 .. highlight:: json
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
269
991
1316bc62b5d5 migration to UCLouvain servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 950
diff changeset
270 The full list of configuration is available `here <https://orthanc.uclouvain.be/hg/orthanc-authorization/file/tip/Plugin/DefaultConfiguration.json>`__.
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
271
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
272 Here is the list of all the configuration options::
97
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 96
diff changeset
273
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
274 {
945
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
275 "Authorization" : {
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
276 // The Base URL of the auth webservice. This is an alias for all 3 next configurations:
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
277 // // "WebServiceUserProfileUrl" : " ROOT /user/get-profile",
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
278 // // "WebServiceTokenValidationUrl" : " ROOT /tokens/validate",
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
279 // // "WebServiceTokenCreationBaseUrl" : " ROOT /tokens/",
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
280 // // "WebServiceTokenDecoderUrl" : " ROOT /tokens/decode",
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
281 // You should define it only if your auth webservice implements all 3 routes !
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
282 // "WebServiceRootUrl" : "http://change-me:8000/",
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
283
945
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
284 // The URL of the auth webservice route implementing user profile (optional)
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
285 // (this configuration was previously named "WebService" and its old name is still accepted
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
286 // for backward compatibility)
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
287 // "WebServiceUserProfileUrl" : "http://change-me:8000/user/profile",
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
288
945
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
289 // The URL of the auth webservice route implementing resource level authorization (optional)
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
290 // "WebServiceTokenValidationUrl" : "http://change-me:8000/tokens/validate",
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
291
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
292 // The Base URL of the auth webservice route to create tokens (optional)
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
293 // "WebServiceTokenCreationBaseUrl" : "http://change-me:8000/tokens/",
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
294
945
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
295 // The URL of the auth webservice route implementing token decoding (optional)
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
296 // "WebServiceTokenDecoderUrl": "http://change-me:8000/tokens/decode"
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
297
945
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
298 // The username and password to connect to the webservice (optional)
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
299 //"WebServiceUsername": "change-me",
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
300 //"WebServicePassword": "change-me",
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
301
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
302 // An identifier added to the payload of each request to the auth webservice (optional)
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
303 //"WebServiceIdentifier": "change-me"
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
304
945
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
305 // The name of the HTTP headers that may contain auth tokens
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
306 //"TokenHttpHeaders" : [],
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
307
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
308 // The name of the GET arguments that may contain auth tokens
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
309 //"TokenGetArguments" : [],
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
310
945
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
311 // A list of predefined configurations for well-known plugins
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
312 // "StandardConfigurations": [ // new in v 0.4.0
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
313 // "osimis-web-viewer",
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
314 // "stone-webviewer",
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
315 // "orthanc-explorer-2"
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
316 // ],
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
317
945
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
318 //"UncheckedResources" : [],
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
319 //"UncheckedFolders" : [],
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
320 //"CheckedLevel" : "studies",
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
321 //"UncheckedLevels" : [],
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
322
945
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
323 // Definition of required "user-permissions". This can be fully customized.
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
324 // You may define other permissions yourself as long as they match the permissions
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
325 // provided in the user-profile route implemented by the auth-service.
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
326 // You may test your regex in https://regex101.com/ by selecting .NET (C#) and removing the leading ^ and trailing $
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
327 // The default configuration is suitable for Orthanc-Explorer-2 (see https://github.com/orthanc-team/orthanc-auth-service)
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
328 "Permissions" : [
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
329 ["post", "^/auth/tokens/decode$", ""],
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
330 ["post", "^/tools/lookup$", ""],
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
331
945
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
332 // elemental browsing in OE2
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
333 ["post", "^/tools/find$", "all|view"],
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
334 ["get" , "^/(patients|studies|series|instances)/([a-f0-9-]+)$", "all|view"],
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
335 ...
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
336 ]
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
337 }
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
338 }
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
339
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
340 The following options have been described above: ``WebServiceRootUrl``,
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
341 ``TokenGetArguments``, and ``TokenHttpHeaders``. Here are the
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
342 remaining options:
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
343
893
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
344 * ``StandardConfigurations`` is a helper configuration to pre-populate
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
345 ``UncheckedResources``, ``UncheckedFolders``, ``TokenGetArguments``,
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
346 and ``TokenHttpHeaders`` of well-known plugins.
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
347 Allowed values are ``osimis-web-viewer``, ``stone-webviewer``.
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
348
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
349 * ``CheckedLevel`` may replace ``UncheckedLevels`` when authorization
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
350 is checked only at one level of the DICOM hierarchy. This is the most
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
351 common use-case.
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
352
98
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
353 * ``UncheckedResources`` specifies a list of resources for which the
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
354 authentication plugin is not triggered, and to which access is
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
355 always granted.
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
356
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
357 * ``UncheckedFolders`` is similar to ``UncheckedResources`` for folders:
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
358 Access to all the URIs below the unchecked folders is always granted.
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
359
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
360 * ``UncheckedLevels`` allows to specify which levels of the
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
361 :ref:`DICOM hierarchy <model-world>` are ignored by the authorization
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
362 plugin. This can be used to reduce the number of calls to the Web
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
363 service. Think for instance about an authorization mechanism that
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
364 simply associates its studies to a set of granted users: In this case,
b56083f38695 authorization
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 97
diff changeset
365 the series and instance levels can be ignored.
274
c310a795c133 auth-token in search params
amazy
parents: 98
diff changeset
366
c310a795c133 auth-token in search params
amazy
parents: 98
diff changeset
367
893
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
368 Here is a minimal configuration for the :ref:`Stone Web viewer <stone_webviewer>`::
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
369
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
370 {
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
371 // disable basic authentication since it is replaced by the authorization plugin
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
372 "AuthenticationEnabled": false,
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
373
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
374 "Authorization" : {
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
375 "WebServiceTokenValidationUrl" : "http://localhost:8000/shares/validate",
893
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
376 "StandardConfigurations": [
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
377 "stone-webviewer"
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
378 ],
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
379 "CheckedLevel" : "studies"
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
380 }
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
381 }
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
382
950
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 945
diff changeset
383 .. _orthanc-explorer-2-authorization:
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
384
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
385 Integration with the Orthanc Explorer 2
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
386 ---------------------------------------
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
387
950
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 945
diff changeset
388 This project contains a `complete example <https://github.com/orthanc-team/orthanc-auth-service>`__
945
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
389 of a Web services integrating with :ref:`Orthanc Explorer 2 <orthanc-explorer-2>` to implement
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
390 user level permissions and sharing of single studies.
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
391
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
392 This sample also shows how to implement all routes that the webservice might provide:
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
393
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
394 - ``/tokens/validate`` to validate tokens identifying either a user or granting access to a single resource
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
395 - ``/tokens/{token_type}`` to generate tokens granting access to specific DICOM resources.
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
396 - ``/tokens/decode`` to extract the info from a token
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
397 - ``/user/get-profile`` to return the user profile linked to a given token. This profile
11d7d30ca273 updated auth plugin doc
Alain Mazy <am@osimis.io>
parents: 921
diff changeset
398 includes a list of permissions.
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
399
893
8b48d42665c4 auth 0.4.0
Alain Mazy <am@osimis.io>
parents: 878
diff changeset
400
274
c310a795c133 auth-token in search params
amazy
parents: 98
diff changeset
401 .. _orthanc-explorer-authorization:
c310a795c133 auth-token in search params
amazy
parents: 98
diff changeset
402
c310a795c133 auth-token in search params
amazy
parents: 98
diff changeset
403 Integration with the Orthanc Explorer
c310a795c133 auth-token in search params
amazy
parents: 98
diff changeset
404 -------------------------------------
c310a795c133 auth-token in search params
amazy
parents: 98
diff changeset
405
1004
17bf6fafb884 added links to uclouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 993
diff changeset
406 Starting from Orthanc 1.5.8, you can pass authorization tokens in the
17bf6fafb884 added links to uclouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 993
diff changeset
407 url search params when opening the Orthanc explorer, i.e.
17bf6fafb884 added links to uclouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 993
diff changeset
408 ``http://localhost:8042/app/explorer.html?token=1234``. This token
17bf6fafb884 added links to uclouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 993
diff changeset
409 will be included as an HTTP header in every request sent to the
17bf6fafb884 added links to uclouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 993
diff changeset
410 Orthanc Rest API. It will also be included in the URL search params
17bf6fafb884 added links to uclouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 993
diff changeset
411 when opening the Orthanc or :ref:`Osimis Web viewer
17bf6fafb884 added links to uclouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 993
diff changeset
412 <osimis_webviewer>`.
274
c310a795c133 auth-token in search params
amazy
parents: 98
diff changeset
413
c310a795c133 auth-token in search params
amazy
parents: 98
diff changeset
414 Only 3 tokens name will be recognized and forwarded: ``token``, ``auth-token``
c310a795c133 auth-token in search params
amazy
parents: 98
diff changeset
415 and ``authorization``.
c310a795c133 auth-token in search params
amazy
parents: 98
diff changeset
416
c310a795c133 auth-token in search params
amazy
parents: 98
diff changeset
417 Please note that the Orthanc Explorer has not been designed to handle
c310a795c133 auth-token in search params
amazy
parents: 98
diff changeset
418 the authorization so, when an authorization is not granted, it will simply
c310a795c133 auth-token in search params
amazy
parents: 98
diff changeset
419 display an empty page or an error message.
920
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
420
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
421
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
422 Compilation
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
423 -----------
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
424
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
425 .. highlight:: bash
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
426
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
427 The procedure to compile this plugin is similar of that for the
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
428 :ref:`core of Orthanc <binaries>`. The following commands should work
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
429 for most UNIX-like distribution (including GNU/Linux)::
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
430
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
431 $ mkdir Build
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
432 $ cd Build
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
433 $ cmake .. -DSTATIC_BUILD=ON -DCMAKE_BUILD_TYPE=Release
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
434 $ make
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
435
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
436 The compilation will produce a shared library ``OrthancAuthorization``
1d9e0aa08fdd auth plugin
Alain Mazy <am@osimis.io>
parents: 893
diff changeset
437 that contains the authorization plugin.