oidc-spa 1.0.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  <br>
7
7
  <br>
8
8
  <a href="https://github.com/garronej/oidc-spa/actions">
9
- <img src="https://github.com/garronej/oidc-spa/workflows/ci/badge.svg?branch=main">
9
+ <img src="https://github.com/garronej/oidc-spa/actions/workflows/ci.yaml/badge.svg?branch=main">
10
10
  </a>
11
11
  <a href="https://bundlephobia.com/package/oidc-spa">
12
12
  <img src="https://img.shields.io/bundlephobia/minzip/oidc-spa">
@@ -31,7 +31,8 @@ With a streamlined API, you can easily integrate OIDC without needing to underst
31
31
 
32
32
  ### [oidc-client-ts](https://github.com/authts/oidc-client-ts)
33
33
 
34
- While `oidc-client-ts` serves as a comprehensive toolkit, our library aims to provide a simplified, ready-to-use adapter. We utilize `oidc-client-ts` internally but abstract away most of its intricacies.
34
+ While `oidc-client-ts` serves as a comprehensive toolkit, our library aims to provide a simplified, ready-to-use adapter that will pass
35
+ any security audit. We utilize `oidc-client-ts` internally but abstract away most of its intricacies.
35
36
 
36
37
  ### [react-oidc-context](https://github.com/authts/react-oidc-context)
37
38
 
@@ -66,21 +67,40 @@ import { createOidc, decodeJwt } from "oidc-spa";
66
67
  issuerUri: "https://auth.your-domain.net/auth/realms/myrealm",
67
68
  clientId: "myclient",
68
69
  // Optional, you can modify the url before redirection to the identity server
70
+ // Alternatively you can use: getExtraQueryParams: ()=> ({ ui_locales: "fr" })
69
71
  transformUrlBeforeRedirect: url => `${url}&ui_locales=fr`
70
- /** Optional: Provide only if your app is not hosted at the origin */
71
- //silentSsoUrl: `${window.location.origin}/foo/bar/baz/silent-sso.html`,
72
+ /**
73
+ * This parameter have to be provided provide if your App is not hosted at the origin of the subdomain.
74
+ * For example if your site is hosted by navigating to `https://www.example.com`
75
+ * you don't have to provide this parameter.
76
+ * On the other end if your site is hosted by navigating to `https://www.example.com/my-app`
77
+ * Then you want to set publicUrl to `/my-app`
78
+ *
79
+ * Be mindful that `${window.location.origin}${publicUrl}/silent-sso.html` must return the `silent-sso.html` that
80
+ * you are supposed to have created in your `public/` directory.
81
+ *
82
+ * If your are still using `create-react-app` you can just set
83
+ * publicUrl to `process.env.PUBLIC_URL` and don't have to think about it further.
84
+ */
85
+ //websiteRootUrl: `${window.location.origin}/my-app`
72
86
  });
73
87
 
74
88
  if (oidc.isUserLoggedIn) {
75
- // This return a promise that never resolve. Your user will be redirected to the identity server.
76
- // If you are calling login because the user clicked
77
- // on a 'login' button you should set doesCurrentHrefRequiresAuth to false.
78
- // When you are calling login because your user navigated to a path that require authentication
79
- // you should set doesCurrentHrefRequiresAuth to true
80
- oidc.login({ doesCurrentHrefRequiresAuth: false });
89
+ oidc.login({
90
+ // This return a promise that never resolve. Your user will be redirected to the identity server.
91
+ // doesCurrentHrefRequiresAuth determines the behavior when a user gives up on loggin in and navigate back.
92
+ // We don't want to send him back to a authenticated route.
93
+ // If you are calling login because the user clicked
94
+ // on a 'login' button you should set doesCurrentHrefRequiresAuth to false.
95
+ // When you are calling login because your user navigated to a path that require authentication
96
+ // you should set doesCurrentHrefRequiresAuth to true
97
+ doesCurrentHrefRequiresAuth: false
98
+ //Optionally you can add some extra parameter to be added on the login url.
99
+ //extraQueryParams: { kc_idp_hint: "google" }
100
+ });
81
101
  } else {
82
102
  const {
83
- // The accessToken is what you'll use a a Bearer token to authenticate to your APIs
103
+ // The accessToken is what you'll use as a Bearer token to authenticate to your APIs
84
104
  accessToken,
85
105
  // You can parse the idToken as a JWT to get some information about the user.
86
106
  idToken
@@ -95,7 +115,8 @@ import { createOidc, decodeJwt } from "oidc-spa";
95
115
  console.log(`Hello ${user.preferred_username}`);
96
116
 
97
117
  // To call when the user click on logout.
98
- oidc.logout();
118
+ // You can also redirect to a custom url with { redirectTo: "specific url", url: `${location.origin}/bye` }
119
+ oidc.logout({ redirectTo: "home" });
99
120
  }
100
121
  })();
101
122
  ```
@@ -129,24 +150,38 @@ function App() {
129
150
  return (
130
151
  <>
131
152
  You're not logged in.
132
- <button onClick={() => oidc.login({ doesCurrentHrefRequiresAuth: false })}>
133
- Login now
153
+ <button
154
+ onClick={() =>
155
+ oidc.login({
156
+ doesCurrentHrefRequiresAuth: false
157
+ //Optionally you can add some extra parameter to be added on the login url.
158
+ //extraQueryParams: { kc_idp_hint: "google" }
159
+ })
160
+ }
161
+ >
162
+ Login
134
163
  </button>
135
164
  </>
136
165
  );
137
166
  }
138
167
 
139
- return <AppLoggedIn />;
168
+ return (
169
+ <AppLoggedIn
170
+ // You can also redirect to a custom url with { redirectTo: "specific url", url: `${location.origin}/bye` }
171
+ logout={() => oidc.logout({ redirectTo: "home" })}
172
+ />
173
+ );
140
174
  }
141
175
 
142
- function AppLoggedIn() {
143
- const { oidc } = useOidc();
176
+ function AppLoggedIn(props: { logout: () => Promise<never> }) {
177
+ const { logout } = props;
178
+
144
179
  const { user } = useUser();
145
180
 
146
181
  return (
147
182
  <>
148
183
  <h1>Hello {user.preferred_username}</h1>
149
- <button onClick={() => oidc.logout()}>Log out</button>
184
+ <button onClick={logout}>Log out</button>
150
185
  </>
151
186
  );
152
187
  }
@@ -169,13 +204,18 @@ function useUser() {
169
204
  sub: string;
170
205
  preferred_username: string;
171
206
  }>(idToken),
172
- idToken
207
+ [idToken]
173
208
  );
174
209
 
175
210
  return { user };
176
211
  }
177
212
  ```
178
213
 
214
+ ## Refreshing token
215
+
216
+ The token refresh is handled automatically for you, however you can manually trigger
217
+ a token refresh with `oidc.getTokens()`.
218
+
179
219
  ## Demo setup
180
220
 
181
221
  <p align="center">
package/oidc.d.ts CHANGED
@@ -10,6 +10,7 @@ export declare namespace Oidc {
10
10
  isUserLoggedIn: false;
11
11
  login: (params: {
12
12
  doesCurrentHrefRequiresAuth: boolean;
13
+ extraQueryParams?: Record<string, string>;
13
14
  }) => Promise<never>;
14
15
  };
15
16
  type LoggedIn = Common & {
@@ -18,6 +19,9 @@ export declare namespace Oidc {
18
19
  getTokens: () => Tokens;
19
20
  logout: (params: {
20
21
  redirectTo: "home" | "current page";
22
+ } | {
23
+ redirectTo: "specific url";
24
+ url: string;
21
25
  }) => Promise<never>;
22
26
  };
23
27
  type Tokens = {
@@ -32,6 +36,19 @@ export declare function createOidc(params: {
32
36
  issuerUri: string;
33
37
  clientId: string;
34
38
  transformUrlBeforeRedirect?: (url: string) => string;
35
- /** Default `${window.location.origin}/silent-sso.html` */
36
- silentSsoUrl?: string;
39
+ getExtraQueryParams?: () => Record<string, string>;
40
+ /**
41
+ * This parameter have to be provided provide if your App is not hosted at the origin of the subdomain.
42
+ * For example if your site is hosted by navigating to `https://www.example.com`
43
+ * you don't have to provide this parameter.
44
+ * On the other end if your site is hosted by navigating to `https://www.example.com/my-app`
45
+ * Then you want to set publicUrl to `/my-app`
46
+ *
47
+ * Be mindful that `${window.location.origin}${publicUrl}/silent-sso.html` must return the `silent-sso.html` that
48
+ * you are supposed to have created in your `public/` directory.
49
+ *
50
+ * If your are still using `create-react-app` you can just set
51
+ * publicUrl to `process.env.PUBLIC_URL` and don't have to think about it further.
52
+ */
53
+ publicUrl?: string;
37
54
  }): Promise<Oidc>;
package/oidc.js CHANGED
@@ -94,12 +94,21 @@ var Deferred_1 = require("./tools/Deferred");
94
94
  var paramsToRetrieveFromSuccessfulLogin = ["code", "state", "session_state"];
95
95
  function createOidc(params) {
96
96
  return __awaiter(this, void 0, void 0, function () {
97
- var issuerUri, clientId, _a, silentSsoUrl, _b, transformUrlBeforeRedirect, configHash, configHashKey, userManager, login, currentTokens, common, oidc;
97
+ var issuerUri, clientId, _a, transformUrlBeforeRedirect, getExtraQueryParams, publicUrl_params, publicUrl, configHash, configHashKey, userManager, login, currentTokens, common, oidc;
98
98
  var _this = this;
99
- return __generator(this, function (_c) {
100
- switch (_c.label) {
99
+ return __generator(this, function (_b) {
100
+ switch (_b.label) {
101
101
  case 0:
102
- issuerUri = params.issuerUri, clientId = params.clientId, _a = params.silentSsoUrl, silentSsoUrl = _a === void 0 ? "".concat(window.location.origin, "/silent-sso.html") : _a, _b = params.transformUrlBeforeRedirect, transformUrlBeforeRedirect = _b === void 0 ? function (url) { return url; } : _b;
102
+ issuerUri = params.issuerUri, clientId = params.clientId, _a = params.transformUrlBeforeRedirect, transformUrlBeforeRedirect = _a === void 0 ? function (url) { return url; } : _a, getExtraQueryParams = params.getExtraQueryParams, publicUrl_params = params.publicUrl;
103
+ publicUrl = (function () {
104
+ if (publicUrl_params === undefined) {
105
+ return window.location.origin;
106
+ }
107
+ if (publicUrl_params.startsWith("http")) {
108
+ return publicUrl_params.replace(/\/$/, "");
109
+ }
110
+ return "".concat(window.location.origin).concat(publicUrl_params);
111
+ })();
103
112
  configHash = (0, fnv1aHashToHex_1.fnv1aHashToHex)("".concat(issuerUri, " ").concat(clientId));
104
113
  configHashKey = "configHash";
105
114
  userManager = new oidc_client_ts_1.UserManager({
@@ -109,10 +118,10 @@ function createOidc(params) {
109
118
  "response_type": "code",
110
119
  "scope": "openid profile",
111
120
  "automaticSilentRenew": false,
112
- "silent_redirect_uri": "".concat(silentSsoUrl, "?").concat(configHashKey, "=").concat(configHash)
121
+ "silent_redirect_uri": "".concat(publicUrl, "/silent-sso.html?").concat(configHashKey, "=").concat(configHash)
113
122
  });
114
123
  login = function (_a) {
115
- var doesCurrentHrefRequiresAuth = _a.doesCurrentHrefRequiresAuth;
124
+ var doesCurrentHrefRequiresAuth = _a.doesCurrentHrefRequiresAuth, extraQueryParams = _a.extraQueryParams;
116
125
  return __awaiter(_this, void 0, void 0, function () {
117
126
  function URL() {
118
127
  var args = [];
@@ -123,7 +132,17 @@ function createOidc(params) {
123
132
  return new Proxy(urlInstance, {
124
133
  "get": function (target, prop) {
125
134
  if (prop === "href") {
126
- return transformUrlBeforeRedirect(urlInstance.href);
135
+ var url_1 = urlInstance.href;
136
+ Object.entries(__assign(__assign({}, getExtraQueryParams === null || getExtraQueryParams === void 0 ? void 0 : getExtraQueryParams()), extraQueryParams)).forEach(function (_a) {
137
+ var _b = __read(_a, 2), name = _b[0], value = _b[1];
138
+ return (url_1 = (0, urlQueryParams_1.addQueryParamToUrl)({
139
+ url: url_1,
140
+ name: name,
141
+ value: value
142
+ }).newUrl);
143
+ });
144
+ url_1 = transformUrlBeforeRedirect(url_1);
145
+ return url_1;
127
146
  }
128
147
  //@ts-expect-error
129
148
  return target[prop];
@@ -313,7 +332,7 @@ function createOidc(params) {
313
332
  return tokens;
314
333
  })];
315
334
  case 1:
316
- currentTokens = _c.sent();
335
+ currentTokens = _b.sent();
317
336
  common = {
318
337
  "params": {
319
338
  issuerUri: issuerUri,
@@ -329,28 +348,28 @@ function createOidc(params) {
329
348
  "refreshToken": currentTokens.refreshToken,
330
349
  "refreshTokenExpirationTime": currentTokens.refreshTokenExpirationTime,
331
350
  "accessTokenExpirationTime": currentTokens.accessTokenExpirationTime
332
- }); }, "logout": function (_a) {
333
- var redirectTo = _a.redirectTo;
334
- return __awaiter(_this, void 0, void 0, function () {
335
- return __generator(this, function (_b) {
336
- switch (_b.label) {
337
- case 0: return [4 /*yield*/, userManager.signoutRedirect({
338
- "post_logout_redirect_uri": (function () {
339
- switch (redirectTo) {
340
- case "current page":
341
- return window.location.href;
342
- case "home":
343
- return window.location.origin;
344
- }
345
- })()
346
- })];
347
- case 1:
348
- _b.sent();
349
- return [2 /*return*/, new Promise(function () { })];
350
- }
351
- });
351
+ }); }, "logout": function (params) { return __awaiter(_this, void 0, void 0, function () {
352
+ return __generator(this, function (_a) {
353
+ switch (_a.label) {
354
+ case 0: return [4 /*yield*/, userManager.signoutRedirect({
355
+ "post_logout_redirect_uri": (function () {
356
+ switch (params.redirectTo) {
357
+ case "current page":
358
+ return window.location.href;
359
+ case "home":
360
+ return publicUrl;
361
+ case "specific url":
362
+ return params.url;
363
+ }
364
+ (0, assert_1.assert)(false);
365
+ })()
366
+ })];
367
+ case 1:
368
+ _a.sent();
369
+ return [2 /*return*/, new Promise(function () { })];
370
+ }
352
371
  });
353
- }, "renewTokens": function () { return __awaiter(_this, void 0, void 0, function () {
372
+ }); }, "renewTokens": function () { return __awaiter(_this, void 0, void 0, function () {
354
373
  var user;
355
374
  return __generator(this, function (_a) {
356
375
  switch (_a.label) {
package/oidc.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"oidc.js","sourceRoot":"","sources":["src/oidc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oidc.js","sourceRoot":"","sources":["src/oidc.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oidc-spa",
3
- "version": "1.0.1",
3
+ "version": "2.0.1",
4
4
  "description": "Openidconnect client for Single Page Applications",
5
5
  "repository": {
6
6
  "type": "git",
package/src/oidc.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { UserManager, type User } from "oidc-client-ts";
2
2
  import { id } from "tsafe/id";
3
3
  import { readExpirationTimeInJwt } from "./tools/readExpirationTimeInJwt";
4
- import { assert } from "tsafe/assert";
4
+ import { assert, type Equals } from "tsafe/assert";
5
5
  import { addQueryParamToUrl, retrieveQueryParamFromUrl } from "./tools/urlQueryParams";
6
6
  import { fnv1aHashToHex } from "./tools/fnv1aHashToHex";
7
7
  import { Deferred } from "./tools/Deferred";
@@ -18,14 +18,19 @@ export declare namespace Oidc {
18
18
 
19
19
  export type NotLoggedIn = Common & {
20
20
  isUserLoggedIn: false;
21
- login: (params: { doesCurrentHrefRequiresAuth: boolean }) => Promise<never>;
21
+ login: (params: {
22
+ doesCurrentHrefRequiresAuth: boolean;
23
+ extraQueryParams?: Record<string, string>;
24
+ }) => Promise<never>;
22
25
  };
23
26
 
24
27
  export type LoggedIn = Common & {
25
28
  isUserLoggedIn: true;
26
29
  renewTokens(): Promise<void>;
27
30
  getTokens: () => Tokens;
28
- logout: (params: { redirectTo: "home" | "current page" }) => Promise<never>;
31
+ logout: (
32
+ params: { redirectTo: "home" | "current page" } | { redirectTo: "specific url"; url: string }
33
+ ) => Promise<never>;
29
34
  };
30
35
 
31
36
  export type Tokens = {
@@ -43,16 +48,42 @@ export async function createOidc(params: {
43
48
  issuerUri: string;
44
49
  clientId: string;
45
50
  transformUrlBeforeRedirect?: (url: string) => string;
46
- /** Default `${window.location.origin}/silent-sso.html` */
47
- silentSsoUrl?: string;
51
+ getExtraQueryParams?: () => Record<string, string>;
52
+ /**
53
+ * This parameter have to be provided provide if your App is not hosted at the origin of the subdomain.
54
+ * For example if your site is hosted by navigating to `https://www.example.com`
55
+ * you don't have to provide this parameter.
56
+ * On the other end if your site is hosted by navigating to `https://www.example.com/my-app`
57
+ * Then you want to set publicUrl to `/my-app`
58
+ *
59
+ * Be mindful that `${window.location.origin}${publicUrl}/silent-sso.html` must return the `silent-sso.html` that
60
+ * you are supposed to have created in your `public/` directory.
61
+ *
62
+ * If your are still using `create-react-app` you can just set
63
+ * publicUrl to `process.env.PUBLIC_URL` and don't have to think about it further.
64
+ */
65
+ publicUrl?: string;
48
66
  }): Promise<Oidc> {
49
67
  const {
50
68
  issuerUri,
51
69
  clientId,
52
- silentSsoUrl = `${window.location.origin}/silent-sso.html`,
53
- transformUrlBeforeRedirect = url => url
70
+ transformUrlBeforeRedirect = url => url,
71
+ getExtraQueryParams,
72
+ publicUrl: publicUrl_params
54
73
  } = params;
55
74
 
75
+ const publicUrl = (() => {
76
+ if (publicUrl_params === undefined) {
77
+ return window.location.origin;
78
+ }
79
+
80
+ if (publicUrl_params.startsWith("http")) {
81
+ return publicUrl_params.replace(/\/$/, "");
82
+ }
83
+
84
+ return `${window.location.origin}${publicUrl_params}`;
85
+ })();
86
+
56
87
  const configHash = fnv1aHashToHex(`${issuerUri} ${clientId}`);
57
88
  const configHashKey = "configHash";
58
89
 
@@ -63,13 +94,17 @@ export async function createOidc(params: {
63
94
  "response_type": "code",
64
95
  "scope": "openid profile",
65
96
  "automaticSilentRenew": false,
66
- "silent_redirect_uri": `${silentSsoUrl}?${configHashKey}=${configHash}`
97
+ "silent_redirect_uri": `${publicUrl}/silent-sso.html?${configHashKey}=${configHash}`
67
98
  });
68
99
 
69
- const login: Oidc.NotLoggedIn["login"] = async ({ doesCurrentHrefRequiresAuth }) => {
100
+ const login: Oidc.NotLoggedIn["login"] = async ({
101
+ doesCurrentHrefRequiresAuth,
102
+ extraQueryParams
103
+ }) => {
70
104
  //NOTE: We know there is a extraQueryParameter option but it doesn't allow
71
- // to control the encoding so we have to hack the global URL Class that is
72
- // used internally by oidc-client-ts
105
+ // to control the encoding so we have to highjack global URL Class that is
106
+ // used internally by oidc-client-ts. It's save to do so since this is the
107
+ // last thing that will be done before the redirect.
73
108
 
74
109
  const URL_real = window.URL;
75
110
 
@@ -79,7 +114,23 @@ export async function createOidc(params: {
79
114
  return new Proxy(urlInstance, {
80
115
  "get": (target, prop) => {
81
116
  if (prop === "href") {
82
- return transformUrlBeforeRedirect(urlInstance.href);
117
+ let url = urlInstance.href;
118
+
119
+ Object.entries({
120
+ ...getExtraQueryParams?.(),
121
+ ...extraQueryParams
122
+ }).forEach(
123
+ ([name, value]) =>
124
+ (url = addQueryParamToUrl({
125
+ url,
126
+ name,
127
+ value
128
+ }).newUrl)
129
+ );
130
+
131
+ url = transformUrlBeforeRedirect(url);
132
+
133
+ return url;
83
134
  }
84
135
 
85
136
  //@ts-expect-error
@@ -298,15 +349,18 @@ export async function createOidc(params: {
298
349
  "refreshTokenExpirationTime": currentTokens.refreshTokenExpirationTime,
299
350
  "accessTokenExpirationTime": currentTokens.accessTokenExpirationTime
300
351
  }),
301
- "logout": async ({ redirectTo }) => {
352
+ "logout": async params => {
302
353
  await userManager.signoutRedirect({
303
354
  "post_logout_redirect_uri": (() => {
304
- switch (redirectTo) {
355
+ switch (params.redirectTo) {
305
356
  case "current page":
306
357
  return window.location.href;
307
358
  case "home":
308
- return window.location.origin;
359
+ return publicUrl;
360
+ case "specific url":
361
+ return params.url;
309
362
  }
363
+ assert<Equals<typeof params, never>>(false);
310
364
  })()
311
365
  });
312
366
  return new Promise<never>(() => {});