Skip to content

Commit

Permalink
Remove references of statically served Keycloak JS from documentation
Browse files Browse the repository at this point in the history
Closes keycloak#32821

Signed-off-by: Jon Koops <[email protected]>
  • Loading branch information
jonkoops authored and mposolda committed Sep 12, 2024
1 parent cafc905 commit 1888932
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,31 @@
The {project_name} Server comes with a JavaScript library you can use to interact with a resource server protected by a policy enforcer.
This library is based on the {project_name} JavaScript adapter, which can be integrated to allow your client to obtain permissions from a {project_name} Server.

You can obtain this library from a running a {project_name} Server instance by including the following `script` tag in your web page:
You can obtain this library by installing it https://www.npmjs.com/package/keycloak-js[from NPM]:

[source,html,subs="attributes+"]
[source,bash]
----
<script src="http://...{kc_js_path}/keycloak-authz.js"></script>
npm install keycloak-js
----

Next, you can create a `KeycloakAuthorization` instance as follows:

[source,javascript]
----
const keycloak = ... // obtain a Keycloak instance from keycloak.js library
import Keycloak from "keycloak-js";
import KeycloakAuthorization from "keycloak-js/authz";
const keycloak = new Keycloak({
// Replace this with your own configuration.
url: "http://keycloak-server",
realm: "myrealm",
clientId: "myapp"
});
const authorization = new KeycloakAuthorization(keycloak);
----
The *keycloak-authz.js* library provides two main features:

The `keycloak-js/authz` library provides two main features:

* Obtain permissions from the server using a permission ticket, if you are accessing a UMA protected resource server.

Expand Down Expand Up @@ -48,15 +59,14 @@ and use the library to send an authorization request as follows:
[source,javascript]
----
// prepare a authorization request with the permission ticket
const authorizationRequest = {};
authorizationRequest.ticket = ticket;
const authorizationRequest = { ticket };
// send the authorization request, if successful retry the request
Identity.authorization.authorize(authorizationRequest).then(function (rpt) {
authorization.authorize(authorizationRequest).then((rpt) => {
// onGrant
}, function () {
}, () => {
// onDeny
}, function () {
}, () => {
// onError
});
----
Expand All @@ -71,13 +81,13 @@ Most applications should use the `onGrant` callback to retry a request after a 4

== Obtaining entitlements

The ```keycloak-authz.js``` library provides an `entitlement` function that you can use to obtain an RPT from the server by providing
The `keycloak-js/authz` library provides an `entitlement` function that you can use to obtain an RPT from the server by providing
the resources and scopes your client wants to access.

.Example about how to obtain an RPT with permissions for all resources and scopes the user can access
[source,javascript]
----
authorization.entitlement('my-resource-server-id').then(function (rpt) {
authorization.entitlement("my-resource-server-id").then((rpt) => {
// onGrant callback function.
// If authorization was successful you'll receive an RPT
// with the necessary permissions to access the resource server
Expand All @@ -87,13 +97,13 @@ authorization.entitlement('my-resource-server-id').then(function (rpt) {
.Example about how to obtain an RPT with permissions for specific resources and scopes
[source,javascript]
----
authorization.entitlement('my-resource-server', {
"permissions": [
authorization.entitlement("my-resource-server", {
permissions: [
{
"id" : "Some Resource"
id: "Some Resource"
}
]
}).then(function (rpt) {
}).then((rpt) => {
// onGrant
});
----
Expand All @@ -108,7 +118,7 @@ The `entitlement` function is completely asynchronous and supports a few callbac

== Authorization request

Both ```authorize``` and ```entitlement``` functions accept an authorization request object. This object can be set with the following
Both `authorize` and `entitlement` functions accept an authorization request object. This object can be set with the following
properties:

* *permissions*
Expand All @@ -118,10 +128,10 @@ An array of objects representing the resource and scopes. For instance:
[source,javascript]
----
const authorizationRequest = {
"permissions": [
permissions: [
{
"id" : "Some Resource",
"scopes" : ["view", "edit"]
id: "Some Resource",
scopes: ["view", "edit"]
}
]
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Host: localhost:8080

In this case, your realm must have an identity provider with a `facebook` alias. If this provider does not exist, the login form is displayed.

If you are using the `keycloak.js` adapter, you can also achieve the same behavior as follows:
If you are using the JavaScript adapter, you can also achieve the same behavior as follows:

[source,javascript]
----
Expand Down
5 changes: 2 additions & 3 deletions docs/documentation/upgrading/topics/upgrade_adapters.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,11 @@ To upgrade the {appserver_name} adapter, complete the following steps:
[[_upgrade_js_adapter]]
== Upgrading the JavaScript adapter

To upgrade a JavaScript adapter that has been copied to your web application, perform the following procedure.
To upgrade a JavaScript adapter, install the latest version https://www.npmjs.com/package/keycloak-js[from NPM].

.Procedure
. `npm install keycloak-js@latest`

. Download the new adapter archive.
. Overwrite the `keycloak.js` file in your application with the `keycloak.js` file from the downloaded archive.

[[_upgrade_nodejs_adapter]]
== Upgrading the `Node.js` adapter
Expand Down
4 changes: 1 addition & 3 deletions docs/guides/securing-apps/javascript-adapter.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,13 @@ summary="Client-side JavaScript library that can be used to secure web applicati

== Installation

The adapter is distributed in several ways, but we recommend that you install the https://www.npmjs.com/package/keycloak-js[`keycloak-js`] package from NPM:
We recommend that you install the https://www.npmjs.com/package/keycloak-js[`keycloak-js`] package from NPM:

[source,bash]
----
npm install keycloak-js
----

Alternatively, the library can be retrieved directly from the {project_name} server at `{kc_js_path}/keycloak.js` and is also distributed as a ZIP archive. We are however considering the inclusion of the adapter directly from the Keycloak server as deprecated, and this functionality might be removed in the future.

== {project_name} server configuration

One important thing to consider about using client-side applications is that the client has to be a public client as there is no secure way to store client credentials in a client-side application. This consideration makes it very important to make sure the redirect URIs you have configured for the client are correct and as specific as possible.
Expand Down
8 changes: 0 additions & 8 deletions docs/guides/server/reverseproxy.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,6 @@ The following table shows the recommended paths to expose.
|No
|Exposed admin paths lead to an unnecessary attack vector.

|/js/
| -
|Yes (see note below)
|Access to keycloak.js needed for "internal" clients, e.g. the account console

|/realms/
|/realms/
|Yes
Expand Down Expand Up @@ -126,9 +121,6 @@ The following table shows the recommended paths to expose.

|===

[NOTE]
As it's true that the `js` path is needed for internal clients like the account console, it's good practice to use `keycloak.js` from a JavaScript package manager like npm or yarn for your external clients.

We assume you run {project_name} on the root path `/` on your reverse proxy/gateway's public API.
If not, prefix the path with your desired one.

Expand Down

0 comments on commit 1888932

Please sign in to comment.