diff --git a/README.org b/README.org index 81c8a51..e5a61c3 100644 --- a/README.org +++ b/README.org @@ -12,3 +12,6 @@ You can serve it with your preferred local file server. python -m SimpleHTTPServer 9999 #+END_SRC + +Generate self certificate + diff --git a/cert.pem b/cert.pem deleted file mode 100644 index 2251c91..0000000 --- a/cert.pem +++ /dev/null @@ -1,21 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDfjCCAmYCCQCkePR4pS0CNjANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMC -RlIxDzANBgNVBAgMBkZyYW5jZTEQMA4GA1UEBwwHTW91Z2luczEOMAwGA1UECgwF -Q2lzY28xDTALBgNVBAsMBElST0gxDDAKBgNVBAMMA0NUUjEhMB8GCSqGSIb3DQEJ -ARYSeWFlc3Bvc2lAY2lzY28uY29tMB4XDTE4MTAxMTA4MzYyNloXDTE5MTAxMTA4 -MzYyNlowgYAxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIDAZGcmFuY2UxEDAOBgNVBAcM -B01vdWdpbnMxDjAMBgNVBAoMBUNpc2NvMQ0wCwYDVQQLDARJUk9IMQwwCgYDVQQD -DANDVFIxITAfBgkqhkiG9w0BCQEWEnlhZXNwb3NpQGNpc2NvLmNvbTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMcScS0YDCjJdTMbGFYCLm6ixcNtZJAp -qBM3hB5OuSOY05PXfovefvjPQLgw1BEoIDyzwy/5ZMWgxsFsqqMaLCAWcjuOvmRs -1/RKznjkiPGviZ0CKzeeQ+LY9SdsRtwNM0abB4Od20EjkMRu7Mk1cm5zG/8y+ONn -T8ZChDFT3wPWmKbftL8zOANe9n/eX/bWutc1wcu4NehunZliLkNPnqkPlHe6KZqM -O4llE+8H2CeNFdUVk83HXFUVX0La3hQmjN2JZwEkYyjUzejb1ic9+EWTeNhBHYV6 -98yJaj3AB4AFKlmFrHPJOw8jSlxol34w7jK3vQeJ+XsU79NjYyctNgsCAwEAATAN -BgkqhkiG9w0BAQsFAAOCAQEAU+L1NtOw9FdiDx1dgdwtShajoHBNGG8ugy5xg7qF -kJbnhqqSoTd2wibQSdXhBcg0BLaRnjfg3J30X+LmHE29wvIxauHlGH3eTzaNXRH1 -Re8IhSGMH7XNyMHvJN89DhsxSbS86zyBz08patNwYmHvyDohDffipMcd3mnOrjcs -gwp4t2/HGpDHSENkxgEm7pKBouBWgbAVxKDoLRyfoBG/jts+0d+c0B4DDmIdgeY2 -W8sbWQoPIFxs6I1cJOuAr86D7YvW2JbaPSy3RN9QnOWeKnNEgK8NTSZuT7ICnFwA -lUGLT2SInc1Np4NfOWH6LgmRxgnb2mPr2LBf5NqliqdILg== ------END CERTIFICATE----- diff --git a/cert/.gitignore b/cert/.gitignore new file mode 100644 index 0000000..a95812a --- /dev/null +++ b/cert/.gitignore @@ -0,0 +1,5 @@ +*.key +*.pem +*.crt +*.srl +*.csr diff --git a/cert/gen-new-cert.sh b/cert/gen-new-cert.sh new file mode 100755 index 0000000..1510174 --- /dev/null +++ b/cert/gen-new-cert.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +if (( $# == 0 )); then + echo "Please provide a root certificate name you trust as first parameter" + echo "For example: $0 rootCA" + exit 1 +fi + +rootca=$1 + +echo "Create certificate key for localhost: server.key" +openssl req -new -sha256 -nodes -out server.csr \ + -newkey rsa:2048 \ + -keyout server.key \ + -config server.csr.cnf + +echo "Create SSL certificate for localhost: server.crt" +openssl x509 -req \ + -in server.csr \ + -CA $rootca.pem \ + -CAkey $rootca.key \ + -CAcreateserial \ + -out server.crt \ + -days 500 \ + -sha256 \ + -extfile v3.ext diff --git a/cert/gen-new-root-cert.sh b/cert/gen-new-root-cert.sh new file mode 100755 index 0000000..dabc3f5 --- /dev/null +++ b/cert/gen-new-root-cert.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +name=${1:-rootCA} + +echo "Generate root certificate key ${name}.key" +openssl genrsa -des3 -out ${name}.key 2048 + +echo "Generate new root SSL certificate: ${name}.pem" +openssl req -x509 -new -nodes -key ${name}.key -sha256 -days 1024 -out ${name}.pem + +echo "You should now trust the root SSL certificate" +echo " Example: https://www.freecodecamp.org/news/how-to-get-https-working-on-your-local-development-environment-in-5-minutes-7af615770eec/#step-2-trust-the-root-ssl-certificate" diff --git a/cert/server.csr.cnf b/cert/server.csr.cnf new file mode 100644 index 0000000..0b7ff39 --- /dev/null +++ b/cert/server.csr.cnf @@ -0,0 +1,14 @@ +[req] +default_bits = 2048 +prompt = no +default_md = sha256 +distinguished_name = dn + +[dn] +C=US +ST=LocalState +L=LocalCity +O=LocalOrganization +OU=LocalOrganizationUnit +emailAddress=nobody@dev.null +CN = localhost diff --git a/cert/v3.ext b/cert/v3.ext new file mode 100644 index 0000000..ab9de5f --- /dev/null +++ b/cert/v3.ext @@ -0,0 +1,7 @@ +authorityKeyIdentifier=keyid,issuer +basicConstraints=CA:FALSE +keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment +subjectAltName = @alt_names + +[alt_names] +DNS.1 = localhost diff --git a/code.html b/code.html deleted file mode 100644 index 16bc4fc..0000000 --- a/code.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - OAuth2 Demo Login - - - - - - -

Yolo App login page

-

Authorization process done!

- ← go back to main page -

Authorization Status

-

-        
-

State

- The process should also return the state provided. -

-        
-

Code

-

The code is generated by the Authentication server and send back - to the client via the resource's owner user-agent

-

For us, it is a JWT:

-

-            

Which once decoded is:

-

-            

Tokens

-

Now the client server need to retrieve an Access Token - and a Refresh Token by using that code.

-

To achieve that the client will make a call to /token - using a basic auth creds

-

You have about 10 mins to retrieve them. - Unlike in this demo, that MUST be done server side.

-
- Get Access & Refresh Tokens from Code -
-

Response from /token

-

token endpoint URL: Nothing yet.

-
Nothing yet.
-

decoded access-token

-
Nothing yet.
-

decoded refresh-token

-
Nothing yet.
-

Using the API

-
- Make an API call with the access token -
-

API URL: Nothing yet.

-
Nothing yet.
-

Getting new access token without user interaction

-

The access tokens are the only tokens which are able to talk to the - Visibility API.

-

Access tokens live a short time (about 10 min to 1 hour)

-

This is why the client must require a new access token using its - refresh token. - That is just making another call to /token - But with different parameters.

-
- Get Access Tokens from Refresh Token -
-
Nothing yet.
-
Nothing yet.
-
- - - diff --git a/implicit.html b/implicit.html deleted file mode 100644 index ee15f8d..0000000 --- a/implicit.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - OAuth2 Demo Login - - - - - - -

Yolo App login page

-

Authorization process done!

- ← go back to main page -

Authorization Status

-

-        
-

State

- The process should also return the state provided. -

-        
-

Access Token

-

The access token is generated by the Authentication server and - send back to the client via the resource's owner user-agent

-

Access tokens live a short time (about 10 min to 1 hour)

-

For us, it is a JWT:

-

-            

Which once decoded is:

-

-            

Using the API

-

API Call

-

API URL: Nothing yet.

-
- Make an API call with the access token -
-

API URL: Nothing yet.

-
Nothing yet.
-
- - - diff --git a/info.js b/info.js new file mode 120000 index 0000000..1f0a02e --- /dev/null +++ b/info.js @@ -0,0 +1 @@ +site/infos.js \ No newline at end of file diff --git a/infos.js b/infos.js deleted file mode 100644 index f949bd6..0000000 --- a/infos.js +++ /dev/null @@ -1,14 +0,0 @@ -var oauthURLPrefix="http://localhost:9001"; -var oauthServerUrl=oauthURLPrefix + "/iroh/oauth2/authorize"; -var oauthServerTokenUrl=oauthURLPrefix + "/iroh/oauth2/token"; -var resourceProviderTestEndpoint=oauthURLPrefix + "/iroh/iroh-ui-settings/whoami" ; -var response_type="code"; -var client_id="localtest"; -var client_password = "localpass"; -var redirect_uri="http://localhost:9999/code.html"; -var scopes=[ "private-intel" - , "ui-settings" - // , inexistant - ]; -var scope=scopes.join(" "); -var state="whatever"; diff --git a/infos.js.gpg b/infos.js.gpg deleted file mode 100644 index 4f79c2a..0000000 Binary files a/infos.js.gpg and /dev/null differ diff --git a/key.pem b/key.pem deleted file mode 100644 index 18c71a0..0000000 --- a/key.pem +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -MIIFHzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQIqIPBaCV4dboCAggA -MB0GCWCGSAFlAwQBKgQQ40H1LVEAqcn6NxyeVmGMGgSCBNBwlIRFA/GH3vCTdx1p -shrFQZbLpLdvK7HVk5mo8Mhdvj3xPqAhBMTdrSDKPJe+YfOoZVplhvttMB2WxIlj -ubXf+Xr+8RdmygpfvxuGaVlfHH07IfOuqIrV/W0r9FocrCKUjRBUXnhx1L9CA4pB -LrW4xtXgmqh+gzWv8pWfUB6wTJnsCrWvC/FJeWGW6CwejuGcGTekWreqnZzmB575 -CoiOVG76dYG2gAgDX/Y7ucyUGS9QfNuDxElCwu65M+7nicAPKunYkN3Dn2PG6GeD -3ama/Iuf8/3J6UWcYGXiY+WIm/js71ZCHHvK31IsuNRWDkphr5oGRydC5P2CEgSB -xb0c0RA8TJbgH/IIeF8rV0h+OvNIToXI8gNLasW5lFjx5MnM0tvkmokcyXX2NpOI -QA6qhxQLfKRLPTuV1JKg46udcOohW0qLv8sz9FX3eK9gF195u6o/Qk75r7oQlppd -o3HGcxNNxBwHYB1YqixVLUP6aPTkccbodHz5Bu4AAzgS4xHYaVE+RgVgGLiTK9WF -eWWnXt0HcixPLUZtifCdZx/J4Or51VqJGGOf2RHZa1GV3TzWG+0DdF8VaY9D/4n5 -LBx+2CBZM3vQwXEZhm3kOAA0889eTJ7wq6Va5CAPp+02saV4HRK1ae7gGU+SuX4X -rGL2mrh/vk2qjlx+wt1/DsyPhdBpbbC3Ggfr11JeJMsndHEXhHxDnE2Rcr7iRtBB -HiWaWrTKAGlXbEnZAz9M2+5Vw84LPhKUtlP01ffZGE2Ln+LeTSew0KG5K0EJs2d8 -M25SeBUIdG9JfVqShKKbLzOeYRq/7mpnhhplDKH7VVb6MImmw64wk4CCfwt2mWVS -SukOBF7tHKh4eZlJZ9b2+7VzmGL5tv16R+Dai2aZkcp2Nj9ASFSFMzVwKs9S3JnK -BEDLIXEHWRzRpIOQB701nnPMvFGuPsVe8Z0Fl6oD11VmJlxQZdY6asxDB8NSbdXU -moPwYedowN/cltGhA9QBefEyZH0FvF9MGqjGm2+dI5F7059cLfPHcJWH1FGyzvZO -oCqL878Uvi1e9Kdg2FbnyOwkKQjIMMmq0hfkkIEt0MGo6Db+ptGhosCZmtyXo5xx -PlCZXc1GhW/eL24MRQcTuwNGxQSSIYT/gDPgbKu4Fd3PlVIVYUw7/hwMJD3eQJAs -3WERyV1J6WOZWDaDLS3pdUTzWyuEjriUfVpIeiNFle0uSIXcP1Y3UFVkQo2P5C4/ -9mxuJDpNz8nx7wQEJX3+AlFbh95rclgni9Sz5z3t1fO6aUQPkjQz5ZEEJ8O8sQXh -GQtLkomBQ5B9ZT6RYiyY4It9l1vvAX0EoqYfmIaBMd/DAu6/eNxFoszHgUdClA6O -RSp549Qrno+BGxw7XrJxXDqVmWGv8gXMP067xFd6ud1mM9l6yf4g+MrTSqkxYHTU -7HwFqC2jJksRskLpVgPsFz0qowLbGhkB6u/Ccq6YP4cazQ5a4llm8wo+8KL9KZhP -+LcOqYJWvi02hG8hqEks8pT5bVWjrcWJIvpOMnPzyxmJOtyC8bKAEB7rAFwgYeLR -t5OcZginGLvoh/9pthVCWJSljlNP3EaO0kd51+r6XP6bSpTjjvCPRm0DwPnw8C4I -Gi5TUJGHzcQrVY6FEQHS1pIL+A== ------END ENCRYPTED PRIVATE KEY----- diff --git a/login.html b/login.html deleted file mode 100644 index 16bc4fc..0000000 --- a/login.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - OAuth2 Demo Login - - - - - - -

Yolo App login page

-

Authorization process done!

- ← go back to main page -

Authorization Status

-

-        
-

State

- The process should also return the state provided. -

-        
-

Code

-

The code is generated by the Authentication server and send back - to the client via the resource's owner user-agent

-

For us, it is a JWT:

-

-            

Which once decoded is:

-

-            

Tokens

-

Now the client server need to retrieve an Access Token - and a Refresh Token by using that code.

-

To achieve that the client will make a call to /token - using a basic auth creds

-

You have about 10 mins to retrieve them. - Unlike in this demo, that MUST be done server side.

-
- Get Access & Refresh Tokens from Code -
-

Response from /token

-

token endpoint URL: Nothing yet.

-
Nothing yet.
-

decoded access-token

-
Nothing yet.
-

decoded refresh-token

-
Nothing yet.
-

Using the API

-
- Make an API call with the access token -
-

API URL: Nothing yet.

-
Nothing yet.
-

Getting new access token without user interaction

-

The access tokens are the only tokens which are able to talk to the - Visibility API.

-

Access tokens live a short time (about 10 min to 1 hour)

-

This is why the client must require a new access token using its - refresh token. - That is just making another call to /token - But with different parameters.

-
- Get Access Tokens from Refresh Token -
-
Nothing yet.
-
Nothing yet.
-
- - - diff --git a/nopasskey.pem b/nopasskey.pem deleted file mode 100644 index fa7c02b..0000000 --- a/nopasskey.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAxxJxLRgMKMl1MxsYVgIubqLFw21kkCmoEzeEHk65I5jTk9d+ -i95++M9AuDDUESggPLPDL/lkxaDGwWyqoxosIBZyO46+ZGzX9ErOeOSI8a+JnQIr -N55D4tj1J2xG3A0zRpsHg53bQSOQxG7syTVybnMb/zL442dPxkKEMVPfA9aYpt+0 -vzM4A172f95f9ta61zXBy7g16G6dmWIuQ0+eqQ+Ud7opmow7iWUT7wfYJ40V1RWT -zcdcVRVfQtreFCaM3YlnASRjKNTN6NvWJz34RZN42EEdhXr3zIlqPcAHgAUqWYWs -c8k7DyNKXGiXfjDuMre9B4n5exTv02NjJy02CwIDAQABAoIBAQCmuaNgCQvl/RPT -QZYYMquArYLEMhJPSxQhRBW67GPSlGRfJdQugKIG8E1b9kkmNV0KeeO3gkAL5KOR -y9j90SWzmhkCGIMMyLv1NdHHHmAzSrkOboqTglGI4/wukFioY8XWFHEuoj7HR2ov -mldmDQVRy8Ze7enVSuldOshMJ9pX8x9bE6hnxBDsI6Vm8nJfnpZDi76UNKf+4F9c -d2GA6z31BsQOOFPb7OmTZ8nAg7Mn/6J6oW1h4PKq34qjxJdHfFtsjuB1h+zdsUMW -HlB521TUJqgOg9hUkhO9OcMEmigJnpe3FVOcEU+rlnQa4FVGpUhBdQzRPah4P6KO -iM+Lq1rBAoGBAPWVZQNXVK5KAjpbETVUIN3vyDaykGfLWo3gGb7+mDZyP4XQp9uI -+mULdBr4fbm2kY/ZWKTosLuOjdZd7UbD2ON9XOXZkxbBbV13J3iZMnkhNvvLoait -7fTg0Q3v8n5tmYWW5S4/Ixoef6rbl/Y+7qnrtyAV1ltpGM/B8mVrol6PAoGBAM+E -A5zxTp79vAYCljMFbzQEtW8wWUL/JvMetCozrgwDmSDgBuo8/2YH9AueKJE78tr4 -ZiUFCRmJqaZbBnbVOvRehXiW5+OkWAaN+xQyr8Bw6PMn9GJ7fXNiKUQ+verQDFd1 -vW9PwIdD0S7QTo7udzfSJxcTTvpkCMLVRzXUV27FAoGAVkyXYKMxuMV9HvCdjXXw -zszSOJZrNG47dhvIMFvbNVbUh7uZIQZzp0ptFIU5+Sb04+3mvpyebmpb4XbESNfN -wbNuD79zds2mFvAmSLTdDb/kSHt4ZYQpWKIgFJu7RT5ScqViB+xb83PAPVRJhFj9 -GW0hvv6tgxXdiDSJb6ZxOnUCgYB3DzYHeId0Pv3+sMM+WLLZtI3oUmQURVIykP4r -bGVCbVoQ+5fcEs0x3ARQGhkKYsvOiFAKk14KMeqNEJKf4W0mwYhwjJxVBnieoh1Z -FE+z6NQullDnpBRw+/PTPPA35c/+6gWa9LXwpZ9B7a/036q08zUMTz6z+GryZe2q -W78iRQKBgQDC3sajFjIxLs5uXKMVIWhj8JXaDh35EhknTxOPIoXjoNUOn4YeALYs -tVm7rGmaLlG+R78mqWEPmWBNOG9PUCfyfaRWYrxHu0ZGirwK7g9sWaawpW5sfN0v -NztJc4vx/YlAS9SJvbW+uoPTgos4qvJj2Y03kgJ3oV793w+5FQMlqA== ------END RSA PRIVATE KEY----- diff --git a/brutalist.css b/site/brutalist.css similarity index 100% rename from brutalist.css rename to site/brutalist.css diff --git a/callback b/site/callback similarity index 100% rename from callback rename to site/callback diff --git a/index.html b/site/index.html similarity index 100% rename from index.html rename to site/index.html diff --git a/site/infos.js b/site/infos.js new file mode 100644 index 0000000..323128e --- /dev/null +++ b/site/infos.js @@ -0,0 +1,11 @@ +var oauthURLPrefix="https://visibility.amp.cisco.com"; +var oauthServerUrl=oauthURLPrefix + "/iroh/oauth2/authorize"; +var oauthServerTokenUrl=oauthURLPrefix + "/iroh/oauth2/token"; +var resourceProviderTestEndpoint=oauthURLPrefix + "/iroh/profile/whoami" ; +var response_type="code"; +var client_id="client-3bb1e787-381d-4f12-bf32-e1158f200ddc"; +var client_password = "CrXwg31_vnRHpjPXzgVzUFKHr6RO8GTL-iI8aDeUU3n48NtD7PFLhg"; +var redirect_uri="https://localhost:5443/callback.html"; +var scopes=[ "profile", "inspect" ]; +var scope=scopes.join(" "); +var state="whatever="; diff --git a/start-server.sh b/start-server.sh old mode 100644 new mode 100755 index 650ec45..87e413e --- a/start-server.sh +++ b/start-server.sh @@ -1,2 +1,13 @@ #!/usr/bin/env zsh -sws --local --no-auth . --port 5443 --certificate=cert.pem --key-file=nopasskey.pem -X 'Content-Type: text/html; charset=utf-8' + +# https://github.com/derekelkins/sws +# version 0.4.2.0 +# 1. Install stack: https://docs.haskellstack.org/en/stable/README/ +# 2. Exec: stack install sws + +sws --local \ + --no-auth site \ + --port 5443 \ + --certificate=cert/server.crt \ + --key-file=cert/server.key \ + -X 'Content-Type: text/html; charset=utf-8'