[
https://issues.apache.org/jira/browse/GEODE-2854?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16051115#comment-16051115
]
ASF GitHub Bot commented on GEODE-2854:
---------------------------------------
Github user joeymcallister commented on a diff in the pull request:
https://github.com/apache/geode/pull/583#discussion_r122320206
--- Diff: geode-docs/rest_apps/setup_config.html.md.erb ---
@@ -29,162 +31,233 @@ All Geode REST interface classes and required JAR
files are distributed as a WAR
where _install-dir_ is the server installation directory and _n.n.n_ is a
version number.
-To enable the developer REST API service in Apache Geode, set the
`start-dev-rest-api` Geode property to `true` when starting a data node using
either `gfsh` or the ServerLauncher API. Setting this property to true on a
data node will start up an embedded Jetty server and deploy the REST developer
API WAR file.
+- [Enabling the REST API](#setup_config_enabling_rest)
+- [Starting the REST API Service](#setup_config_starting_rest)
+- [Implementing Authentication for the REST
API](#setup_config_implementing_auth)
+- [Programmatic Startup](#setup_config_implementing_auth)
+
+# <a id="setup_config_enabling_rest" class="no-quick-link"></a>Enabling
the REST API
+
+The REST API service for application development runs only on data nodes;
you cannot run the service on a locator.
+
+To enable the Developer REST API service on a given server, set the
`start-dev-rest-api` property
+to `true` when starting the data node to start an embedded Jetty server
and deploy the Developer REST
+API WAR file on that node. Use either the `gfsh start server` command or
the ServerLauncher API to enable this property.
-**Note:**
-The REST API service for application development runs only on servers; you
cannot use locators to host the developer Geode REST API services.
+## Enabling the REST API on Multiple Nodes
-You can have multiple REST enabled data nodes in a single distributed
system. Each data node should
+You can configure multiple REST enabled data nodes in a single distributed
system. Each data node should
have a separate host name and unique end point. To ensure that the data
node is reachable on a
-machine with multiple NIC addresses, you can use
`http-service-bind-address` to bind an address to
-the REST API service (as well as the other embedded web services such as
Pulse).
+machine with multiple NIC addresses, use `http-service-bind-address` to
bind an address to
+the REST API service (as well as the other embedded web services, such as
Pulse).
-You can also configure the Developer REST API service to run over
-HTTPS by enabling ssl for the `http` component in `gemfire.properties`
-or `gfsecurity.properties` or on server startup:
-See [SSL](../managing/security/ssl_overview.html) for details on
configuring SSL parameters.
-These SSL parameters apply to all HTTP services hosted on the configured
server, which can include the following:
+You can configure the Developer REST API service to run over HTTPS by
enabling SSL for the `http`
+component in `gemfire.properties` or `gfsecurity.properties`, or on server
startup. See
+[SSL](../managing/security/ssl_overview.html) for details on configuring
SSL parameters. These SSL
+parameters apply to all HTTP services hosted on the configured server,
which can include the
+following:
- Developer REST API service
- Management REST API service (for remote cluster management)
- Pulse monitoring tool
-The following procedure starts up a REST API service-enabled Geode
deployment:
+# <a id="setup_config_starting_rest" class="no-quick-link"></a> Starting
the REST API Service
-1. Configure PDX for your cluster. You must configure PDX if either or
both of the following conditions apply:
- - Application peer member caches will access REST-accessible Regions
(resources) with the `Region.get(key)`.
- - Your deployment has persistent regions that must be available as
resources to the REST API. To configure PDX in your cluster, perform the
following steps:
- 1. Start up a locator running the [cluster configuration
service](../configuring/cluster_config/gfsh_persist.html) (enabled by default).
For example:
+To start a REST API service-enabled Geode deployment, configure PDX
serialization for your
+cluster, then start the service on one or more server nodes.
- ``` pre
- gfsh>start locator --name=locator1
- ```
- 2. If your deployment has application peer member caches (for
example, Java clients) that must also access REST-accessible Regions
(resources), use the following gfsh command:
+## Configure PDX for your cluster
- ``` pre
- gfsh>configure pdx --read-serialized=true
- ```
- **Note:**
- You do not need to configure `--read-serialized=true` if no
application peer member caches are accessing the REST-accessible regions
(resources) in your deployment.
- 3. If your deployment contains **persistent regions** that must
be REST-accessible, use the following gfsh command:
+You must configure PDX if either or both of the following conditions
apply:
- ``` pre
- gfsh>configure pdx --disk-store
- ```
- This command sets `pdx` `persistent` equal to true and sets the
disk-store-name to DEFAULT. If desired, specify an existing disk store name as
the value for `--disk-store`.
- 4. If both of the above cases apply to your deployment, then
configure PDX with the following single command:
+- Application peer member caches will access REST-accessible regions
(resources) with `Region.get(key)`.
+- Your deployment has persistent regions that must be available as
resources to the REST API.
- ``` pre
- gfsh>configure pdx --read-serialized=true --disk-store
- ```
+To configure PDX in your cluster, perform the following steps:
- After you have configured PDX for your caches, then proceed with
starting up your REST-enabled servers and other data nodes.
+1. Start up a locator running the [cluster configuration
service](../configuring/cluster_config/gfsh_persist.html) (enabled by default).
For example:
-2. Start a server node with the Geode property `start-dev-rest-api` set
to `true`.
- Optionally, you can also configure a `http-service-bind-address` and
`http-service-port` to
- identify the cache server and specific port that will host REST
services. If you do not specify
- the `http-service-port`, the default port is 7070. If you do not
specify
- `http-service-bind-address`, the HTTP service will bind to all local
addresses by default.
- **Note:** If your application will be running in a VM (as when running
in the cloud, for example), it's good practice to specify
`http-service-bind-address` and `http-service-port`
- so they will be publicly visible. The default values may not be
visible outside the VM in which the application is running.
+ ``` pre
+ gfsh>start locator --name=locator1
+ ```
- For example:
+2. If your deployment has application peer member caches (for example,
Java clients) that must also access REST-accessible Regions (resources), use
the following gfsh command:
``` pre
- gfsh>start server --name=server1 --start-rest-api=true \
- --http-service-port=8080 --http-service-bind-address=localhost
+ gfsh>configure pdx --read-serialized=true
```
- Any server that hosts data, even a server acting as a JMX manager, can
start the developer REST API service. For example, to start the service on a
server that is also a JMX manager, you would run:
+ **Note:**
+ You do not need to configure `--read-serialized=true` if no
application peer member caches are accessing the REST-accessible regions
(resources) in your deployment.
+
+3. If your deployment contains **persistent regions** that must be
REST-accessible, use the following gfsh command:
+
+ ``` pre
+ gfsh>configure pdx --disk-store
+ ```
+ This command sets `pdx` `persistent` equal to true and sets the
disk-store-name to DEFAULT. If desired, specify an existing disk store name as
the value for `--disk-store`.
+
+4. If both of the above cases apply to your deployment, then configure
PDX with the following single command:
``` pre
- gfsh>start server --name=server1 --start-rest-api=true \
- --http-service-port=8080 --http-service-bind-address=localhost \
- --J=-Dgemfire.jmx-manager=true --J=-Dgemfire.jmx-manager-start=true
+ gfsh>configure pdx --read-serialized=true --disk-store
```
- Note that when started as a JMX Manager, the server will also host the
Pulse web application in the same HTTP service.
+ After you have configured PDX for your caches, then proceed with
starting up your REST-enabled servers and other data nodes.
+
+## Start the REST API Service on One or More Servers
+
+To start the REST API service on a server, start a server node with the
Geode property `start-dev-rest-api` set to `true`.
+Optionally, you can also configure a `http-service-bind-address` and
`http-service-port` to
+identify the cache server and specific port that will host REST services.
If you do not specify
+the `http-service-port`, the default port is 7070. If you do not specify
+`http-service-bind-address`, the HTTP service will bind to all local
addresses by default.
+
+**Note:** If your application will be running in a VM (as when running in
the cloud, for example),
+it is good practice to specify `http-service-bind-address` and
`http-service-port` so they will be
+publicly visible. The default values may not be visible outside the VM in
which the application is
+running.
+
+For example:
+
+```
+gfsh>start server --name=server1 --start-rest-api=true \
+--http-service-port=8080 --http-service-bind-address=localhost
+```
+
+Any server that hosts data, even a server acting as a JMX manager, can
start the Developer REST API service. For example, to start the service on a
server that is also a JMX manager, you would run:
+
+```
+gfsh>start server --name=server1 --start-rest-api=true \
+--http-service-port=8080 --http-service-bind-address=localhost \
+--J=-Dgemfire.jmx-manager=true --J=-Dgemfire.jmx-manager-start=true
+```
+
+Note that when started as a JMX Manager, the server will also host the
Pulse web application in the same HTTP service.
+
+You may also need to specify a CLASSPATH to load any functions that need
to be made available to your REST services. For example:
-3. You may also need to specify a CLASSPATH to load any functions that
need to be made available to your REST services. For example:
+```
+gfsh>start server --name=server1 --start-rest-api=true \
+--http-service-port=8080 --http-service-bind-address=localhost \
+--classpath=/myapps/testfunctions.jar
+```
+
+You can also specify these properties either upon server startup or in the
server’s gemfire.properties configuration file.
+
+```
+gfsh>start server --name=serverX --server-port=40405
--cache-xml-file=cache-config.xml \
+--properties-file=gemfire.properties --classpath=/myapps/testfunctions.jar
+```
+
+where gemfire.properties contains:
+
+```
+http-service-port=8080
+http-service-bind-address=localhost
+start-dev-rest-api=true
+```
+
+## Verify That The Service is Running
+
+Verify that the Geode REST API service is up and running. To validate
this, you can perform the following checks:
+
+1. Test the list resources endpoint (this step assumes that you have
regions defined on your cluster):
``` pre
- gfsh>start server --name=server1 --start-rest-api=true \
- --http-service-port=8080 --http-service-bind-address=localhost \
- --classpath=/myapps/testfunctions.jar
+ curl -i http://localhost:8080/geode/v1
```
-4. You can also specify these properties either upon server startup or in
the server’s gemfire.properties configuration file.
+2. Examine the server logs for the following messages:
``` pre
- gfsh>start server --name=serverX --server-port=40405
--cache-xml-file=cache-config.xml \
- --properties-file=gemfire.properties
--classpath=/myapps/testfunctions.jar
+ [info 2017/06/13 13:48:14.090 PDT gfsec-server1 <main> tid=0x1]
Initializing Spring FrameworkServlet 'geode-mgmt'
+ [info 2017/06/13 13:48:14.091 PDT gfsec-server1 <main> tid=0x1]
FrameworkServlet 'geode-mgmt': initialization started
```
- where gemfire.properties contains:
+3. Open a browser and enter the following URL to browse the
Swagger-enabled REST APIs:
``` pre
- http-service-port=8080
- http-service-bind-address=localhost
- start-dev-rest-api=true
+
http://<http-service-bind-address>:<http-service-port>/geode/docs/index.html
```
-5. Verify that the Geode REST API service is up and running. To validate
this, you can perform the following checks:
- 1. Test the list resources endpoint (this step assumes that you have
regions defined on your cluster):
+ where *http-service-bind-address* is the address and
*http-service-port* is the port number that you specified when starting the
Development REST API service on the server. For example, based on the server
started in an earlier example, you would enter:
- ``` pre
- curl -i http://localhost:8080/gemfire-api/v1
- ```
+ ``` pre
+ http://localhost:8080/geode/docs/index.html
+ ```
+
+If you did not specify these properties upon server startup or in
`gemfire.properties`, then use the
+default of localhost and port 7070. See [Using the Swagger UI to Browse
REST
+APIs](using_swagger.html#concept_rlr_y3c_54) for more information.
+
+# <a id="setup_config_implementing_auth"
class="no-quick-link"></a>Implementing Authentication for the REST API
- 2. Examine the server logs for the following messages:
+To turn on integrated security, start your servers and locators with the
security-manager property
+set in your gemfire.properties file or on the gfsh command-line.
+The following example uses the sample implementation that is included in
the Geode source,
+`org.apache.geode.examples.security.ExampleSecurityManager`.
- ``` pre
- [info 2014/06/12 14:56:52.431 PDT rest-test
<localhost-startStop-1> tid=0x4d]
- (tid=11 msgId=8) Initializing Spring FrameworkServlet
'gemfire-api'[info 2014/06/12
- 14:56:52.432 PDT rest-test <localhost-startStop-1> tid=0x4d]
(tid=11 msgId=9)
- FrameworkServlet 'gemfire-api': initialization started
- ```
+This implementation requires a JSON security configuration file which
defines the allowed users and their corresponding
+permissions. (See the javadocs for `ExampleSecurityManager` for details on
how to compose the JSON file.)
+Place a copy of the JSON security configuration file in the execution
directory of each security-enabled member, then
+specify `--classpath=.` in the start command for each of those members.
- 3. Open a browser and enter the following URL to browse the
Swagger-enabled REST APIs:
+To start a server using a username and password that are defined in that
server's security configuration, include the
+`--user=username` and `--password=password` options in the server's start
command:
- ``` pre
-
http://<http-service-bind-address>:<http-service-port>/gemfire-api/docs/index.html
- ```
+For example, suppose the JSON config file defines user "super-user" with
password "1234567":
+
+```
+gfsh>start server --name=server1 --start-rest-api=true \
+--http-service-port=8080 --http-service-bind-address=localhost \
+--J=-Dgemfire.security-manager=org.apache.geode.examples.security.ExampleSecurityManager
\
+--classpath=. --user=super-user --password=1234567
+```
- where *http-service-bind-address* is the address and
*http-service-port* is the port number that you specified when starting the
Development REST API service on the server. For example, based on the server
started in step 2, you would enter:
+To contact the server through the REST interface, you must provide the
username and password. Various REST GUI interfaces
+provide different ways of accomplishing this. The `curl` command offers
the `--user` (or `-u`) option for this purpose,
+where username and password are specified as a colon-separated pair:
- ``` pre
- http://localhost:8080/gemfire-api/docs/index.html
- ```
+```
+curl -i --user super-user:1234567 http://localhost:8080/geode/v1
+```
+
+In a simple URL, such as in a browser address bar, the credentials can be
given as a prefix to the host name
+in the form `username:password@`:
+
+```
+http://super-user:1234567@localhost:8080/geode/v1
+```
- If you did not specify these properties upon server startup or in
`gemfire.properties`, then use the default of localhost and port 7070. See
[Using the Swagger UI to Browse REST
APIs](using_swagger.html#concept_rlr_y3c_54) for more information.
-## Programmatic Startup
+# <a id="setup_config_implementing_auth"
class="no-quick-link"></a>Programmatic Startup
You can also start up and configure Geode REST services programmatically.
For example:
--- End diff --
Change "start up and" to "start and"
> GEODE REST API Docs Missing Authentication
> ------------------------------------------
>
> Key: GEODE-2854
> URL: https://issues.apache.org/jira/browse/GEODE-2854
> Project: Geode
> Issue Type: Task
> Components: docs
> Reporter: Michael Martell
> Assignee: Dave Barnes
>
> The REST API docs don't document how to do authentication. Looks like HEAD
> params "security-username" and "security-password" are supported but
> undocumented in the REST API.
> There is a comment about REST auth in this link:
> https://geode.apache.org/docs/guide/11/managing/security/implementing_authentication.html
> Also, the docs seem to imply that you pass usr/passwd in the http headers
> such as 'security-username' and 'security-password'. However, it only works
> using HTTP Basic Authentication, which Spring must be translating on the
> server side into the 'security-username' and 'security-password' params.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)