├── Guides
├── AdobeStock.md
├── GuidesOverview.md
├── AdobeCampaign.md
├── AdobeLaunch.md
├── AdobeTarget.md
├── CreativeSDK.md
├── AdobeAnalytics.md
├── AdobePhotoshop.md
└── AdobeExperiencePlatform.md
├── JWT
├── samples
│ ├── adobe-jwt-java
│ │ ├── secret.key
│ │ ├── readme.md
│ │ ├── src
│ │ │ └── main
│ │ │ │ ├── resources
│ │ │ │ └── config.properties
│ │ │ │ └── java
│ │ │ │ └── io
│ │ │ │ └── adobe
│ │ │ │ └── solutions
│ │ │ │ └── IMSClient.java
│ │ └── pom.xml
│ ├── adobe-jwt-node
│ │ ├── app.js
│ │ ├── package.json
│ │ ├── readme.md
│ │ └── config.js
│ ├── adobe-jwt-python
│ │ ├── readme.md
│ │ └── jwtencode.py
│ ├── adobe-jwt-dotnet
│ │ ├── readme.md
│ │ └── Program.cs
│ ├── adobe-jwt-php
│ │ ├── readme.md
│ │ └── AccessTokenProvider.php
│ └── samples.md
├── JWTCertificate.md
├── Scopes.md
└── JWT.md
├── OAuth
├── samples
│ ├── adobe-auth-python
│ │ ├── .gitignore
│ │ ├── config.py
│ │ ├── templates
│ │ │ └── index.html
│ │ ├── adobe-oauth2.0.py
│ │ └── readme.md
│ ├── .DS_Store
│ ├── adobe-auth-node
│ │ ├── .gitignore
│ │ ├── public
│ │ │ └── stylesheets
│ │ │ │ └── style.css
│ │ ├── views
│ │ │ └── index.pug
│ │ ├── package.json
│ │ ├── server
│ │ │ └── index.js
│ │ └── readme.md
│ └── samples.md
├── Scopes.md
└── OAuth.md
├── Images
├── OP_1.png
├── OP_2.png
├── OP_3.png
├── OP_4.png
├── OP_5.png
├── PM_1.png
├── PM_2.png
├── PM_3.png
├── PM_4.png
├── PM_5.png
├── PM_6.png
├── PMW_1.png
├── PMW_2.png
├── PMW_3.png
├── PM_JWT_1.png
├── PM_JWT_2.png
├── PM_JWT_3.png
├── PM_JWT_4.png
├── PM_JWT_5.png
├── api-key-1.png
├── api-key-2.png
├── api-key-3.png
├── api-key-4.png
├── api-key-5.png
├── api-key-6.png
├── api-key-7.png
├── oauth-0.png
├── oauth-1.png
├── oauth-2.png
├── oauth-3.png
├── oauth-4.png
├── oauth-5.png
├── oauth-6.png
├── access_grant.png
├── auth_jwtqs_00.png
├── auth_jwtqs_000.png
├── auth_jwtqs_01.png
├── auth_jwtqs_02.png
├── auth_jwtqs_03.png
├── auth_jwtqs_04.png
├── auth_jwtqs_05.png
├── auth_jwtqs_06.png
├── auth_jwtqs_07.png
├── auth_jwtqs_08.png
├── login_screen.png
└── credentials_page.png
├── COPYRIGHT
├── Resources
├── Tools
│ ├── ToolsOverview.md
│ ├── OAuthPlayground.md
│ └── Postman.md
└── IMS.md
├── Support
└── Index.md
├── LICENSE
├── FAQ
└── Index.md
├── README.md
├── AuthenticationOverview
├── AuthenticationGuide.md
├── OAuthIntegration.md
├── APIKeyIntegration.md
└── ServiceAccountIntegration.md
├── Backup
├── OAuth2.0Endpoints
│ ├── oauth-scopes.md
│ └── web-oauth2.0-guide.md
├── idTypes.md
├── JWTAuthenticationQuickStart.md
└── postmanQuickStart.md
├── CODE_OF_CONDUCT.md
└── manifest.json
/Guides/AdobeStock.md:
--------------------------------------------------------------------------------
1 | # Adobe Stock
2 |
3 | ## Coming Soon
4 |
--------------------------------------------------------------------------------
/Guides/GuidesOverview.md:
--------------------------------------------------------------------------------
1 | # Guides
2 |
3 | ## Coming Soon
4 |
--------------------------------------------------------------------------------
/Guides/AdobeCampaign.md:
--------------------------------------------------------------------------------
1 | # Adobe Campaign
2 |
3 | ## Coming Soon
4 |
--------------------------------------------------------------------------------
/Guides/AdobeLaunch.md:
--------------------------------------------------------------------------------
1 | # Adobe Launch
2 |
3 | ## Coming Soon
4 |
--------------------------------------------------------------------------------
/Guides/AdobeTarget.md:
--------------------------------------------------------------------------------
1 | # Adobe Target
2 |
3 | ## Coming Soon
4 |
--------------------------------------------------------------------------------
/Guides/CreativeSDK.md:
--------------------------------------------------------------------------------
1 | # Creative SDK
2 |
3 | ## Coming Soon
4 |
--------------------------------------------------------------------------------
/JWT/samples/adobe-jwt-java/secret.key:
--------------------------------------------------------------------------------
1 | < TO BE CREATED BY USER >
2 |
--------------------------------------------------------------------------------
/Guides/AdobeAnalytics.md:
--------------------------------------------------------------------------------
1 | # Adobe Analytics
2 |
3 | ## Coming soon
4 |
--------------------------------------------------------------------------------
/Guides/AdobePhotoshop.md:
--------------------------------------------------------------------------------
1 | # Adobe Photoshop
2 |
3 | ## Coming Soon
4 |
--------------------------------------------------------------------------------
/OAuth/samples/adobe-auth-python/.gitignore:
--------------------------------------------------------------------------------
1 | cert.pem
2 | key.pem
3 | *.pyc
4 |
--------------------------------------------------------------------------------
/Images/OP_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/OP_1.png
--------------------------------------------------------------------------------
/Images/OP_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/OP_2.png
--------------------------------------------------------------------------------
/Images/OP_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/OP_3.png
--------------------------------------------------------------------------------
/Images/OP_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/OP_4.png
--------------------------------------------------------------------------------
/Images/OP_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/OP_5.png
--------------------------------------------------------------------------------
/Images/PM_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/PM_1.png
--------------------------------------------------------------------------------
/Images/PM_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/PM_2.png
--------------------------------------------------------------------------------
/Images/PM_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/PM_3.png
--------------------------------------------------------------------------------
/Images/PM_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/PM_4.png
--------------------------------------------------------------------------------
/Images/PM_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/PM_5.png
--------------------------------------------------------------------------------
/Images/PM_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/PM_6.png
--------------------------------------------------------------------------------
/Guides/AdobeExperiencePlatform.md:
--------------------------------------------------------------------------------
1 | # Adobe Experience Platform
2 |
3 | ## Coming Soon
4 |
--------------------------------------------------------------------------------
/Images/PMW_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/PMW_1.png
--------------------------------------------------------------------------------
/Images/PMW_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/PMW_2.png
--------------------------------------------------------------------------------
/Images/PMW_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/PMW_3.png
--------------------------------------------------------------------------------
/Images/PM_JWT_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/PM_JWT_1.png
--------------------------------------------------------------------------------
/Images/PM_JWT_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/PM_JWT_2.png
--------------------------------------------------------------------------------
/Images/PM_JWT_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/PM_JWT_3.png
--------------------------------------------------------------------------------
/Images/PM_JWT_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/PM_JWT_4.png
--------------------------------------------------------------------------------
/Images/PM_JWT_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/PM_JWT_5.png
--------------------------------------------------------------------------------
/Images/api-key-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/api-key-1.png
--------------------------------------------------------------------------------
/Images/api-key-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/api-key-2.png
--------------------------------------------------------------------------------
/Images/api-key-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/api-key-3.png
--------------------------------------------------------------------------------
/Images/api-key-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/api-key-4.png
--------------------------------------------------------------------------------
/Images/api-key-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/api-key-5.png
--------------------------------------------------------------------------------
/Images/api-key-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/api-key-6.png
--------------------------------------------------------------------------------
/Images/api-key-7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/api-key-7.png
--------------------------------------------------------------------------------
/Images/oauth-0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/oauth-0.png
--------------------------------------------------------------------------------
/Images/oauth-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/oauth-1.png
--------------------------------------------------------------------------------
/Images/oauth-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/oauth-2.png
--------------------------------------------------------------------------------
/Images/oauth-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/oauth-3.png
--------------------------------------------------------------------------------
/Images/oauth-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/oauth-4.png
--------------------------------------------------------------------------------
/Images/oauth-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/oauth-5.png
--------------------------------------------------------------------------------
/Images/oauth-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/oauth-6.png
--------------------------------------------------------------------------------
/Images/access_grant.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/access_grant.png
--------------------------------------------------------------------------------
/Images/auth_jwtqs_00.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/auth_jwtqs_00.png
--------------------------------------------------------------------------------
/Images/auth_jwtqs_000.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/auth_jwtqs_000.png
--------------------------------------------------------------------------------
/Images/auth_jwtqs_01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/auth_jwtqs_01.png
--------------------------------------------------------------------------------
/Images/auth_jwtqs_02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/auth_jwtqs_02.png
--------------------------------------------------------------------------------
/Images/auth_jwtqs_03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/auth_jwtqs_03.png
--------------------------------------------------------------------------------
/Images/auth_jwtqs_04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/auth_jwtqs_04.png
--------------------------------------------------------------------------------
/Images/auth_jwtqs_05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/auth_jwtqs_05.png
--------------------------------------------------------------------------------
/Images/auth_jwtqs_06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/auth_jwtqs_06.png
--------------------------------------------------------------------------------
/Images/auth_jwtqs_07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/auth_jwtqs_07.png
--------------------------------------------------------------------------------
/Images/auth_jwtqs_08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/auth_jwtqs_08.png
--------------------------------------------------------------------------------
/Images/login_screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/login_screen.png
--------------------------------------------------------------------------------
/OAuth/samples/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/OAuth/samples/.DS_Store
--------------------------------------------------------------------------------
/Images/credentials_page.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AdobeDocs/adobeio-auth/HEAD/Images/credentials_page.png
--------------------------------------------------------------------------------
/OAuth/samples/adobe-auth-node/.gitignore:
--------------------------------------------------------------------------------
1 | .env
2 | node_modules
3 | server/localhost-key.pem
4 | server/localhost.pem
--------------------------------------------------------------------------------
/COPYRIGHT:
--------------------------------------------------------------------------------
1 | © Copyright 2015-2018 Adobe. All rights reserved.
2 |
3 | Adobe holds the copyright for all the files found in this repository.
4 |
5 | See the LICENSE file for licensing information.
6 |
--------------------------------------------------------------------------------
/JWT/samples/adobe-jwt-node/app.js:
--------------------------------------------------------------------------------
1 | const auth=require("@adobe/jwt-auth");
2 | const _config=require("./config.js");
3 | let options=_config.credentials;
4 | auth(options).then(res => console.log(res));
5 |
6 |
--------------------------------------------------------------------------------
/JWT/samples/adobe-jwt-python/readme.md:
--------------------------------------------------------------------------------
1 | This is a simple example of how to get an access token in python
2 |
3 | You will need to install the necessary dependencies
4 | ```pip install PyJWT```
5 |
6 | You will also need to replace all of the variables encapsulated in {} with your own values
7 |
--------------------------------------------------------------------------------
/OAuth/samples/adobe-auth-python/config.py:
--------------------------------------------------------------------------------
1 | class Config(object):
2 | # Replace below secret key with your secret
3 | # Reference: http://flask.pocoo.org/docs/0.12/quickstart/#sessions.
4 | FLASK_SECRET = 'PLACEHOLDER_SECRET_KEY'
5 | ADOBE_API_KEY = 'YOUR_ADOBE_KEY'
6 | ADOBE_API_SECRET = 'YOUR_ADOBE_SECRET'
--------------------------------------------------------------------------------
/JWT/samples/adobe-jwt-node/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "adobe-jwt-node",
3 | "version": "1.0.0",
4 | "description": "This is a sample code",
5 | "scripts": {
6 | "start": "node app.js"
7 | },
8 | "author": "Hiren Shah",
9 | "license": "MIT",
10 | "dependencies": {
11 | "@adobe/jwt-auth": "^0.3.0"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/JWT/samples/adobe-jwt-node/readme.md:
--------------------------------------------------------------------------------
1 | # Steps
2 | 1. Download and extract the repo
3 |
4 | 2. Edit the config files and add API Key, Client Secret, Org ID, Technical Account ID and Private key from your Adobe Developer Console integration.
5 |
6 | 3. Execute below commands
7 |
8 | ```npm install```
9 |
10 |
11 | ```node app.js```
12 |
--------------------------------------------------------------------------------
/Resources/Tools/ToolsOverview.md:
--------------------------------------------------------------------------------
1 |
2 | # Tools Overview
3 |
4 |
5 | ## [OAuth 2.0 Playground](OAuthPlayground.md)
6 | Do you have an OAuth integration created? Try the OAuth 2.0 Playground tool to generate an access token.
7 |
8 | ## [Postman](Postman.md)
9 | Try Postman for generating an access token for both OAuth and Service Account Integration.
10 |
--------------------------------------------------------------------------------
/OAuth/samples/adobe-auth-node/public/stylesheets/style.css:
--------------------------------------------------------------------------------
1 | * {
2 | font-family: sans-serif;
3 | }
4 |
5 | button {
6 | display: block;
7 | margin: 10px auto;
8 | }
9 |
10 | body {
11 | margin: 60px 40px;
12 | text-align: center;
13 | }
14 |
15 | .btn-group {
16 | margin: 20px auto;
17 | width: 30%;
18 | }
19 |
20 | .title {
21 | display: inline-block;
22 | padding-bottom: -10px;
23 | text-align: center;
24 | margin: 20px;
25 | }
26 |
--------------------------------------------------------------------------------
/OAuth/samples/adobe-auth-node/views/index.pug:
--------------------------------------------------------------------------------
1 | doctype
2 | html
3 | head
4 | title Adobe Auth Example
5 | link(rel='stylesheet', href='/stylesheets/style.css')
6 | body
7 | header
8 | h1 Adobe Auth App
9 | .button-group
10 | button(onclick="location.href='/login'") Log In with Adobe
11 | button(onclick="location.href='/profile'") Get Profile
12 | button(onclick="location.href='/logout'") Log Out
13 | .canvas
14 | p= response
--------------------------------------------------------------------------------
/OAuth/samples/adobe-auth-node/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "adobe-auth-node",
3 | "version": "1.0.0",
4 | "description": "adobe auth node example",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "node ./server/index.js",
8 | "test": "echo \"Error: no test specified\" && exit 1"
9 | },
10 | "author": "",
11 | "license": "ISC",
12 | "dependencies": {
13 | "axios": "^0.21.4",
14 | "dotenv": "^10.0.0",
15 | "express": "^4.16.3",
16 | "express-session": "^1.15.6",
17 | "pug": "^3.0.2"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Support/Index.md:
--------------------------------------------------------------------------------
1 | # Support
2 |
3 | Learn where to ask questions, report bugs, make feature requests, and spark discussions.
4 |
5 | ## [FAQ](../FAQ/Index.md)
6 |
7 | A knowledge base of frequently asked questions. This is a great starting place to find an answer before asking your question.
8 |
9 | ## [GitHub Issues](https://github.com/AdobeDocs/adobeio-auth/issues)
10 |
11 | This is the place to report bugs, ask questions, make feature requests, or start a discussion. You'll find official Adobe developers and community members available to help you out.
12 |
--------------------------------------------------------------------------------
/OAuth/samples/samples.md:
--------------------------------------------------------------------------------
1 | # Sample Code
2 |
3 | The following samples demonstrate basic interaction with the Adobe OAuth endpoints.
4 |
5 | - **Node.js Example**
6 | [Github repo](https://github.com/AdobeDocs/adobeio-auth/tree/stage/OAuth/samples/adobe-auth-node) where you can find a complete Node.js-based web app example that uses Adobe OAuth.
7 |
8 | - **Python Example**
9 | [Github repo](https://github.com/AdobeDocs/adobeio-auth/tree/stage/OAuth/samples/adobe-auth-python) where you can find a complete Python based web app example that uses Adobe OAuth.
10 |
--------------------------------------------------------------------------------
/OAuth/samples/adobe-auth-python/templates/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Adobe Auth Example
6 |
7 |
8 |
9 |
Adobe Auth App
10 |
11 |
12 |
13 |
14 |
15 |
16 | {{ response }}
17 |
18 |
19 |
--------------------------------------------------------------------------------
/JWT/samples/adobe-jwt-java/readme.md:
--------------------------------------------------------------------------------
1 | # Steps
2 |
3 | 1. create the certificate and private key using openssl
4 |
5 | ```$ openssl req -nodes -text -x509 -newkey rsa:2048 -keyout secret.pem -out certificate.pem -days 356```
6 |
7 | 2. Upload the certificate.pem in Adobe IO Console-> Your Integration-> Public keys
8 |
9 | 3. convert private key to DER format
10 |
11 | ```$ openssl pkcs8 -topk8 -inform PEM -outform DER -in secret.pem -nocrypt > secret.key```
12 |
13 | 4. Edit the config.properties in src/main/resources/ and add the values from your Adobe Developer Console integration.
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/JWT/samples/adobe-jwt-dotnet/readme.md:
--------------------------------------------------------------------------------
1 |
2 | # Steps
3 |
4 | 1. create the certificate and private key using openssl
5 |
6 | ```$ openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout private.key -out certificate_pub.crt```
7 |
8 | 2. Upload the certificate_pub.crt in Adobe IO Console-> Your Integration-> Public keys
9 |
10 | 3. convert private key and certificate to pfx format
11 |
12 | ```$ openssl pkcs12 -export -out mycert.pfx -inkey private.key -in certificate_pub.crt```
13 |
14 | 4. Edit the program.cs file and add the properties from your Adobe Developer Console integration.
15 |
16 |
17 |
--------------------------------------------------------------------------------
/JWT/samples/adobe-jwt-java/src/main/resources/config.properties:
--------------------------------------------------------------------------------
1 | #Go to https://www.adobe.com/go/devs_console_ui -> Select your integration and copy the client credential from "Overview"
2 | #API Key (Client ID)
3 | apiKey=6cdd92XXXXXXXXb82de19827.....
4 |
5 | #Technical account ID
6 | technicalAccountId=95FXXXXXXXXBA542B9....@techacct.adobe.com
7 |
8 | #Organization ID
9 | orgId=C74FXXXXXX4880XXXXX9@AdobeOrg
10 |
11 | #Client secret
12 | secret=ae2XXXXc-XXXX-XXXX-bf77-b35.....
13 |
14 | #Go to "JWT" section of the integration and copy below values
15 | #exp
16 | expirationTime=600
17 |
18 | #scopes e.g. ent_user_sdk from "https://ims-na1.adobelogin.com/s/ent_user_sdk"
19 | metascopes=ent_user_sdk
20 |
21 | #Path to secret.key file for the certificate uploaded in console.adobe.io integration
22 | key_path=secret.key
23 |
24 | #URL Endpoints
25 | imsHost=ims-na1.adobelogin.com
26 | imsExchange=https://ims-na1.adobelogin.com/ims/exchange/jwt
27 |
28 |
--------------------------------------------------------------------------------
/JWT/samples/adobe-jwt-java/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 |
8 | 1.7
9 | 1.7
10 |
11 |
12 | io.adobe.solutions
13 | IMS-Client
14 | 1.0-SNAPSHOT
15 |
16 |
17 |
18 |
19 | io.jsonwebtoken
20 | jjwt
21 | 0.9.0
22 |
23 |
24 |
25 | org.json
26 | json
27 | 20171018
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/JWT/samples/adobe-jwt-php/readme.md:
--------------------------------------------------------------------------------
1 | # PHP JWT Provider and auth example
2 |
3 | This is a PHP implementation to prepare JWT and shows an example login to AdobeIO to obtain `access_token`, it does not use any external library and calls `openssl_sign` and other functions available in PHP to build JWT.
4 |
5 | The method `doAdobeIOAuth($jwt,$client_id,$client_secret)` should be used as reference for login, it uses prepared JWT to do an authentication on AdobeIO and fetch `access_token`.
6 |
7 | **To Run**
8 | 1. Download and extract the repo
9 |
10 | 2. Run PHP AccessTokenProvider.php to auth and get AdobeIO Access Token
11 |
12 | 3. Execute below commands
13 |
14 | **Usage**
15 |
16 | ```AccessTokenProvider.php -i -s -k -u -b -c -e ```
17 |
18 | **Example**
19 |
20 | ```php JWT/samples/adobe-jwt-php/AccessTokenProvider.php -i"e1b8b4c4109c48....." -s"965f8635-........" -k"/Path/of/private.key" -u"DD0E3......@AdobeOrg" -b"D36......@techacct.adobe.com" -c"ent_reactor_sdk,ent_adobeio_sdk" -e"1 day"```
21 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | © Copyright 2018 Adobe. All rights reserved.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/FAQ/Index.md:
--------------------------------------------------------------------------------
1 | # Frequently Asked Questions
2 |
3 | - [Where can I find the sample code for OAuth authentication?](#where-can-i-find-the-sample-code-for-oauth-authentication)
4 | - [How to use the private key for generating a JWT?](#how-to-use-the-private-key-for-generating-a-jwt)
5 | - [What does Default Redirect URI and the Redirect URI Pattern means?](#what-does-default-redirect-uri-and-the-redirect-uri-pattern-means)
6 |
7 | ### Where can I find the sample code for OAuth authentication?
8 | There are currently code samples available for [NodeJS](https://github.com/AdobeDocs/adobeio-auth/tree/master/OAuth/samples/adobe-auth-node) and [Python](https://github.com/AdobeDocs/adobeio-auth/tree/master/OAuth/samples/adobe-auth-python).
9 |
10 | ### How to use the private key for generating a JWT?
11 | Please copy the full content of private key including `-----BEGIN PRIVATE KEY-----` and `-----END PRIVATE KEY-----` to generate a correct JWT token.
12 |
13 | ### What do Default Redirect URI and the Redirect URI Pattern mean?
14 | The default redirect URI is the URL where Adobe Identity Management Service (IMS) will send the authorization code after a successful login with Adobe. You will need that code to make a call to the token endpoint to receive an access token.
15 |
16 | The redirect URI pattern is a regex representation of allowed URLs to receive the authorization code. It is used when you pass an optional parameter `redirect_url` with your request.
17 |
--------------------------------------------------------------------------------
/JWT/samples/samples.md:
--------------------------------------------------------------------------------
1 | ## Sample Code
2 |
3 | The following samples demonstrate JWT generation and exchanging it with Adobe IMS endpoint to retrieve an access token.
4 |
5 | ### Node.js Example
6 | [Github repo](https://github.com/AdobeDocs/adobeio-auth/tree/stage/JWT/samples/adobe-jwt-node) where you can find a complete sample Node.js code to generate a JWT and exchanging it with Adobe IMS Endpoint to retrieve an access token.
7 |
8 | ### Java Example
9 | [Github repo](https://github.com/AdobeDocs/adobeio-auth/tree/stage/JWT/samples/adobe-jwt-java) where you can find a complete sample Java code to generate a JWT and exchanging it with Adobe IMS Endpoint to retrieve an access token.
10 |
11 | ### Python Example
12 | [Github repo](https://github.com/AdobeDocs/adobeio-auth/tree/stage/JWT/samples/adobe-jwt-python) where you can find a complete sample Python code to generate a JWT and exchanging it with Adobe IMS Endpoint to retrieve an access token.
13 |
14 | ### C#.NET Example
15 | [Github repo](https://github.com/AdobeDocs/adobeio-auth/tree/stage/JWT/samples/adobe-jwt-dotnet) where you can find a complete sample C#.NET code to generate a JWT and exchanging it with Adobe IMS Endpoint to retrieve an access token.
16 |
17 | ### PHP Example
18 | [Github repo](https://github.com/AdobeDocs/adobeio-auth/tree/stage/JWT/samples/adobe-jwt-php) where you can find PHP code example for JWT creation and reference method that exchanges JWT with Adobe IMS Endpoint to retrieve an access token.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Developer Guide to Adobe I/O Authentication
2 | This guide contains all you need to know to authenticate your apps with Adobe services.
3 |
4 | In this Guide:
5 | - [Authentication Overview](AuthenticationOverview/AuthenticationGuide.md): Discover Adobe authentication models and find out about how to authenticate with Adobe in one of three ways, depending on your application model:
6 | - [API Key Integration](AuthenticationOverview/APIKeyIntegration.md)
7 | - [OAuth Integration](AuthenticationOverview/OAuthIntegration.md)
8 | - [Service Account Integration](AuthenticationOverview/ServiceAccountIntegration.md)
9 | - [OAuth Authentication](OAuth/OAuth.md): Get technical specifications on OAuth 2.0 authorization and authentication. Discover sample applications that can help you create your first integrations.
10 | - [JWT Authentication](JWT/JWT.md): Get technical specifications on JSON Web Token (JWT) authentication, the model used for service account integrations. Discover sample apps.
11 | - [Tools](Resources/Tools/ToolsOverview.md): Adobe recommends two tools for generating access tokens:
12 | - [OAuth 2.0 Playground](Resources/Tools/OAuthPlayground.md): This Adobe service generates OAuth access tokens.
13 | - [Postman](Resources/Tools/Postman.md): This third-party tool generates both OAuth and JWT tokens.
14 | - [IMS APIs](Resources/IMS.md): This guide shows you all the APIs for Adobe Identity Management Services (IMS).
15 | - [Support](Support/Index.md): Resources for getting your Adobe authentication questions answered.
16 | - [FAQ](FAQ.md): Answers to frequently asked questions.
17 |
--------------------------------------------------------------------------------
/JWT/JWTCertificate.md:
--------------------------------------------------------------------------------
1 | # Create a Public Key Certificate
2 |
3 | Create a private key and a public certificate. Make sure you store these securely.
4 |
5 | ## MacOS and Linux:
6 |
7 | Open a terminal and execute the following command:
8 |
9 | `openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout private.key -out certificate_pub.crt`
10 |
11 | 
12 |
13 | ## Windows:
14 |
15 | 1. Download an OpenSSL client to generate public certificates; for example, you can try the [OpenSSL Windows client](https://bintray.com/vszakats/generic/download_file?file_path=openssl-1.1.1-win64-mingw.zip).
16 |
17 | 2. Extract the folder and copy it to the **C:/libs/** location.
18 |
19 | 3. Open a command-line window and execute the following commands:
20 |
21 | ```
22 | set OPENSSL_CONF=C:/libs/openssl-1.1.1-win64-mingw/openssl.cnf
23 |
24 | cd C:/libs/openssl-1.1.1-win64-mingw/
25 |
26 | openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout private.key -out certificate_pub.crt
27 | ```
28 | 
29 |
30 | 4. Once you’ve completed the steps for your chosen platform, continue in the Adobe Developer Console.
31 |
32 | ## Using the Public Key Certificate for Service Account Integration
33 |
34 | 1. Upload the public certificate (certificate_pub.crt) as a part of creating the integration.
35 |
36 | 
37 |
38 | 2. Your integration should now be created with the appropriate public certificate and claims.
39 |
40 | 
41 |
--------------------------------------------------------------------------------
/Resources/Tools/OAuthPlayground.md:
--------------------------------------------------------------------------------
1 | # OAuth 2.0 Playground
2 |
3 | The OAuth 2.0 Playground is an Adobe internet utility that enables developers to easily obtain an OAuth 2.0 access token for use in building and testing their integrations. Before you use the OAuth 2.0 Playground, you should already have created an integration you want to use for this purpose. The OAuth 2.0 Playground source code is also available for you to view and experiment with.
4 |
5 | ## Steps to obtain a token:
6 |
7 | 1. Go to [OAuth 2.0 Playground](https://adobeioruntime.net/api/v1/web/io-solutions/adobe-oauth-playground/oauth.html)
8 |
9 | 
10 |
11 | 2. Go to the [Adobe Developer Console](https://www.adobe.com/go/devs_console_ui)
12 |
13 | 3. Create a project within Console. For complete steps to creating a project in Console, begin by reading the [Adobe Developer Console getting started guide]() and [projects overview]().
14 |
15 | 4. Once you have created a project, you will be able to add services including APIs, Adobe I/O Events registrations, and Adobe I/O Runtime. Add an API to your project and then select the services with which you wish to integrate (such as Adobe Analytics > OAuth 2.0 Integration)
16 |
17 | To add an API that uses OAuth authentication and authorization, follow the steps outlined in the guide for [adding an API to a project using OAuth authentication]().
18 |
19 | When the API has been successfully connected, you will be able to access the newly generated credentials including Client ID and Client Secret.
20 |
21 | 5. Copy your **Client ID** (API Key) and **Client Secret** from Adobe Developer Console into the OAuth 2.0 Playground.
22 |
23 | 6. Enter scopes as:
24 | `openid,read_organizations,additional_info.projectedProductContext,additional_info.job_function`
25 |
26 | 
27 |
28 | 7. Click **Generate Tokens.**
29 |
30 | 8. You will be prompted for login by Adobe. Log in using your Adobe ID.
31 |
32 | 
33 |
34 | 9. Your tokens will be generated.
35 |
36 | 
37 |
--------------------------------------------------------------------------------
/JWT/samples/adobe-jwt-python/jwtencode.py:
--------------------------------------------------------------------------------
1 | import datetime
2 | import json
3 | import jwt
4 | import os
5 | import requests
6 |
7 | # Config Data
8 | url = 'https://ims-na1.adobelogin.com/ims/exchange/jwt'
9 | jwtPayloadRaw = """{ "iss": "{The issuer, your Organization ID from the Adobe Developer Console integration, in the format org_ident@AdobeOrg}",
10 | "sub": "{The subject, your Technical Account ID from the Adobe Developer Console integration, in the format: id@techacct.adobe.com}",
11 | "{The API-access claim configured for your organization: https://ims-na1.adobelogin.com/s/ent_analytics_bulk_ingest_sdk}": true,
12 | "aud": "{The audience for the token, your API Key from the Adobe Developer Console integration, in the format: https://ims-na1.adobelogin.com/c/api_key}" }"""
13 | jwtPayloadJson = json.loads(jwtPayloadRaw)
14 | jwtPayloadJson["exp"] = datetime.datetime.utcnow() + datetime.timedelta(seconds=30)
15 |
16 | accessTokenRequestPayload = {'client_id': '{Your Client Id (API Key)}'
17 | ,'client_secret': 'Your Client Secret'}
18 |
19 | # Request Access Key
20 | #This Needs to point at where your private key is on the file system
21 | keyfile = open(os.path.join(os.path.expanduser('~'),'.ssh/private.key'),'r')
22 | private_key = keyfile.read()
23 |
24 | # Encode the jwt Token
25 | jwttoken = jwt.encode(jwtPayloadJson, private_key, algorithm='RS256')
26 | #print("Encoded JWT Token")
27 | #print(jwttoken.decode('utf-8'))
28 |
29 |
30 | # We are making a http request simmilar to this curl request
31 | #curl -X POST -H "Content-Type: multipart/form-data" -F "client_id=6e806c8aa87b42a49260d7a47a8d3218" -F "client_secret=f4813774-c72f-42ca-8039-3208ff189932" -F "jwt_token=`./jwtenc.sh`" https://ims-na1.adobelogin.com/ims/exchange/jwt
32 | accessTokenRequestPayload['jwt_token'] = jwttoken
33 | result = requests.post(url, data = accessTokenRequestPayload)
34 | resultjson = json.loads(result.text);
35 | #print("Full output from the access token request")
36 | #print(json.dumps(resultjson, indent=4, sort_keys=True))
37 |
38 | # Echo out the access token
39 | print(resultjson["access_token"]);
40 |
41 |
--------------------------------------------------------------------------------
/AuthenticationOverview/AuthenticationGuide.md:
--------------------------------------------------------------------------------
1 | # Adobe I/O Authentication Overview
2 |
3 | Adobe is committed to privacy and security. Nearly all Adobe services require your application to authenticate through the Adobe Identity Management System (IMS) to receive client credentials. The client credentials determine the access and permissions granted to your application.
4 |
5 | Any API that accesses a service, data or content on behalf of an end user authenticates using the OAuth or JSON Web Token standards.
6 |
7 | Use the [Adobe Developer Console](https://www.adobe.com/go/devs_console_ui/) to obtain client credentials by creating a new **Project**. Once you create a project, you can add APIs that include **API Keys** (Client ID) and other access credentials. You can then obtain a secure access token from Adobe for each API session.
8 |
9 | A project can include one or more services. In many cases, you will use the same client credentials to access multiple Adobe products and services. In addition to APIs, you may also add I/O Events and I/O Runtime to your projects so that your applications can access content and services in real-time.
10 |
11 | To learn more about creating projects in Adobe Developer Console, read the [Console getting started guide](https://www.adobe.com/go/devs_console_getting_started).
12 |
13 | ## Types of Authentication
14 |
15 | ### [API Key Integration (Authorization Only)](APIKeyIntegration.md)
16 | An API Key is the only client credential required for these services. These integrations do not need to pass an access token with each request.
17 | e.g. Adobe Stock
18 |
19 | ### [OAuth Integration (OAuth 2.0 authentication flow)](OAuthIntegration.md)
20 | If your integration needs to access content or a service on behalf of an end user, that user must be authenticated as well. Your integration will need to pass the OAuth token granted by the Adobe IMS.
21 | e.g. Creative SDK, Photoshop, Adobe Analytics
22 |
23 | ### [Service Account Integration (JWT authentication flow)](ServiceAccountIntegration.md)
24 | For service-to-service integrations, you will also need a JSON Web Token (JWT) that encapsulates your client credentials and authenticates the identity of your integration. You then exchange the JWT for the access token that authorizes access.
25 | e.g. Adobe Campaign, Adobe Launch, Adobe Target
26 |
--------------------------------------------------------------------------------
/AuthenticationOverview/OAuthIntegration.md:
--------------------------------------------------------------------------------
1 | # OAuth Connection
2 |
3 | If your application needs to access Adobe services or content, you'll need a set of client credentials to authenticate your app and your user, and to authorize access. The type of application you are building will determine the type of client credentials you will need.
4 |
5 | To obtain client credentials for an app that accesses services on behalf of an **end-user**, you'll need to create an **OAuth** connection using the [Adobe Developer Console](https://www.adobe.io/console). You can integrate your app with more than one Adobe service.
6 |
7 | OAuth allows your end users to sign in to your integration with an Adobe ID. With an OAuth token, your application will be able to access Adobe services or content on behalf of the logged in user.
8 |
9 | If your application needs to access Adobe services or content on behalf of an organization (an Adobe enterprise organization), follow the steps for **[Service Account (JWT) Authentication](ServiceAccountIntegration.md)**.
10 |
11 | This article will walk you through the steps to set up an **OAuth** connection.
12 |
13 | ## OAuth connection workflow
14 |
15 | [Step 1: Create a project in Adobe Developer Console](#step-1-create-a-project-in-adobe-developer-console)
16 |
17 | [Step 2: Add an API to your project using OAuth authentication and authorization](#step-2-add-an-api-to-your-project-using-OAuth-authentication-and-authorization)
18 |
19 | [Step 3: Try It](#step-3-try-it)
20 |
21 | ### Step 1: Create a project in Adobe Developer Console
22 |
23 | Integrations are now created as part of a "project" within Adobe Developer Console. For complete steps to creating a project in Console, begin by reading the [Adobe Developer Console getting started guide](https://www.adobe.com/go/devs_console_getting_started) and [projects overview](https://www.adobe.com/go/devs_projects_overview).
24 |
25 | Once you have created a project, you will be able to add services including APIs, I/O Events, and I/O Runtime.
26 |
27 | ### Step 2: Add an API to your project using OAuth authentication and authorization
28 |
29 | To add an API that uses OAuth authentication and authorization, follow the steps outlined in the guide for [adding an API to a project using OAuth authentication](https://www.adobe.com/go/devs_projects_oauth).
30 |
31 | When the API has been successfully connected, you will be able to access the newly generated credentials including Client ID and Client Secret.
32 |
33 | ### Step 3: Try It
34 |
35 | Generate an access token using [OAuth 2.0 Playground](../Resources/Tools/OAuthPlayground.md)
36 |
--------------------------------------------------------------------------------
/JWT/samples/adobe-jwt-node/config.js:
--------------------------------------------------------------------------------
1 | //console.adobe.io -> Integration -> Details
2 |
3 | module.exports = {
4 | credentials: {
5 | clientId : "bb11ebd6406a4f---------f705b26a", //Application ID (Client ID)
6 | technicalAccountId : "8EDD3561-------5CDB@techacct.adobe.com", //Technical account ID
7 | orgId : "EF2D363--------CA@AdobeOrg", // Org ID
8 | clientSecret : "c811f67e-9ed------------25ea148", //Client Secret
9 | metaScopes : "ent_user_sdk", // Metascopes
10 | privateKey : "-----BEGIN RSA PRIVATE KEY-----\n" + //Content of private.key
11 | "MIIEowIBAAKCAQEAtqX3bHwETnyOizuDUWoyT0PTreyQJ9Hkti+5CssnRULAsE/D\n" +
12 | "Yw6RyB8WLlC07mYxUkA/7Ikd1oEvTuAYLCSuJWXu0WBhXHrw6268xP60LjQl1Xu5\n" +
13 | "GQjrTiQll8c0N10dww6TzzupLyFOD/J+TsH9T2zZ/DYukP/x0iOGs/7D3IvJfRcq\n" +
14 | "6FOoAcKSV3geW7IRDnmn+dX4W3SWN/SS9OGRgYu16KBYV2+YvAkRtWM3nMdLuz6a\n" +
15 | "ep16MBZJQErYguowmhrSmLRFOzkZbXPjr6JZmZaNuuPLQnLYLA2p0RUzva5PThkw\n" +
16 | "esidMH2WZQ5dP+4aDA8mwz6eiI6z4+WR8gp3DwIDAQABAoIBADmMN1YGCTFVi3AR\n" +
17 | "E0IOrMVOwJ5XH+B8AIz------------------------------ZzVw45acX1JfMdk\n" +
18 | "UhlugTQlVsa/kE2cKtZzMKT8/3ZjVdxavCpIJiObvgCBclFTVHJF4Ip16MuBud/K\n" +
19 | "bsOP2akxycjupWNoUR/9s4544etV0smbm2wV/KUVth8VFdRMaE2b0xHeCOvS4MP2\n" +
20 | "j1sSqdSmKUBddooFjQwDC/poOQC0GYj+VXEiHrR/uk/P/ipO2Q7N4+2DIDXAe1d7\n" +
21 | "0A6reBaPagbvH---------------------------oX52CDVFJRQzncCXe6WD9tPT\n" +
22 | "ldx9F6ECgYEA8fMntK4pjLKVGkmjuHCmYZqCQfElbxZWBGgeTi6TtQAC/K0NqivL\n" +
23 | "57SMjiZEdE1Ct716PHs8YCHNVQVdPD2Bpv9HXq9Jcz+nQj0onofqsplnj/0nH3ls\n" +
24 | "fJGo27nB8LYDINWXEY3Mr8H7/Xs5/lQIDdoadWriJHCifO0sSdih/b8CgYEAwUE6\n" +
25 | "/PtHPp315mI33azUwZDZ+G4DwI2WICoGs9Z1RlqH8Zk3X11djpGurNNK5/JcPtSS\n" +
26 | "No4CAEX4VYue+N2jtQnJNzH+IhLFBGDwz1JMBMBw1ye8SVtvvgYyeRnmdmsGP1cj\n" +
27 | "Lb8jQckg/1q6lnJvHLq39P8uhAYmNPU7HTojerECgYA1K1w0ZnmXA7+kcT5bT9Yg\n" +
28 | "aNXrK9UwHlZ0zXSrdazb/86oPFdeaBV9K74fluVAMaJRwn/UPri733HCF1Wv4UxW\n" +
29 | "qI7Ejfy0KO7WrZ35iKDY8sFBcT5huktO7KuQ7bdi8HyrgIScRO8QSK7Zu3S5ITpL\n" +
30 | "4PwjhYOAwofSsEQlTkf6/QKBgAR9spQ8dqxi2VsQP0IciRkyd45JaDbqU2nN8Dfv\n" +
31 | "rOwEoJIhwGKr9cehZRDJHD2FqVUgdYFlDXDaL2o1g20/IVXMs2tf8wrxqrhuVEpN\n" +
32 | "HE0j97tYRgziXhdpZ3TfADcSR6PjL4MZpQUbWnP0tM9YO3LMeAfugjM5PVwPst78\n" +
33 | "AeURAoGBANQ0s6p/ZGV9pmteoN452Oz+PHD/WCc1wid9m2eKawqNYRODC6ls1eQ+\n" +
34 | "h1veQozYJLLob3+fVgKiHo/KEtA/4Svq7/+2eW4rBs12C6N+bSBj01no6nmqrDrO\n" +
35 | "j+fOdGjzGxHSiqI8QvKa+9JJodXzfKNT2ALzV/Q7h6OHjsP549Ze\n" +
36 | "-----END RSA PRIVATE KEY-----\n"
37 | }
38 | }
--------------------------------------------------------------------------------
/OAuth/Scopes.md:
--------------------------------------------------------------------------------
1 | # OAuth 2.0 Scopes
2 |
3 | OAuth scopes govern the access and privileges an Adobe user will grant authorization to a third-party application for. As an application developer, you will choose the set of scopes that a user will encounter in an authorization approval screen by specifying the scopes as part of the OAuth authorization request.
4 |
5 |
6 |
7 |
8 |
9 | ## Contents
10 |
11 | - [Creative Cloud](#creative-cloud)
12 | - [Experience Cloud](#experience-cloud)
13 | - [Scope Definitions](#scope-definitions)
14 | - [openid](#openid)
15 | - [creative_sdk](#creative_sdk)
16 |
17 |
18 |
19 | ## Creative Cloud
20 | Scopes for Creative Cloud OAuth based APIs
21 |
22 | APIs | Scopes
23 | ---|---
24 | Adobe Stock | `openid`
25 | Creative SDK | `openid,creative_sdk`
26 | Photoshop | `openid,creative_sdk`
27 | Lightroom | `openid,creative_sdk`
28 |
29 |
30 |
31 |
32 | ## Experience Cloud
33 | Scopes for Experience Cloud OAuth based APIs
34 |
35 | APIs | Scopes
36 | ---|---
37 | Adobe Analytics | `openid,AdobeID,read_organizations,additional_info.projectedProductContext,additional_info.job_function`
38 |
39 |
40 |
41 | ## Scope Definitions
42 | The scope determines the type of access to protected resources an application can be granted authorization to. Scopes are aggregates of specific attributes.
43 |
44 | ### openid
45 |
46 | One-stop-shop scope for accessing Adobe user profile information.
47 |
48 | |Attribute|User Information Returned|
49 | |---|---|
50 | |userId|Unique ID|
51 | |first_name|Given name|
52 | |last_name|Surname or family name|
53 | |phoneNumber|Telephone number (NULL if unavailable)|
54 | |emailVerified|Verification status of primary email address|
55 | |countryCode|Country component of an ISO2 locale code|
56 | |name|Full name|
57 | |displayName|Display name|
58 | |email|Primary email address|
59 | |preferred_languages|An array of locale codes indicating preferred language settings|
60 | |account_type|The account_type with one of the values: type1 (individual), type2 (enterprise), type3 (federated). See [Adobe Identity Types](https://helpx.adobe.com/enterprise/using/identity.html) for details.|
61 |
62 | ### creative_sdk
63 |
64 | Intended for use specifically with the Creative SDK. This is an extension of the `openid` scope, so the following is a list of attributes *in addition* to what's available in the `openid` scope.
65 |
66 | |Attribute|User Information Returned|
67 | |---|---|
68 | |userId|Unique ID|
69 | |service_accounts|An array of service account objects used to provide permissions to Creative Cloud services|
70 |
--------------------------------------------------------------------------------
/Backup/OAuth2.0Endpoints/oauth-scopes.md:
--------------------------------------------------------------------------------
1 | # OAuth 2.0 Scopes
2 |
3 | OAuth scopes govern the access and privileges an Adobe user will grant authorization to a third-party application for. As an application developer, you will choose the set of scopes that a user will encounter in an authorization approval screen by specifying the scopes as part of the OAuth authorization request.
4 |
5 |
6 |
7 |
8 |
9 | ## Contents
10 |
11 | 1. [Creative Cloud](#creative-cloud)
12 | 1. [Experience Cloud](#experience-cloud)
13 | 1. [Scope Definitions](#scope-definitions)
14 | 1. [openid](#openid)
15 | 1. [creative_sdk](#creative_sdk)
16 |
17 |
18 |
19 | ## Creative Cloud
20 | Scopes for Creative Cloud OAuth based APIs
21 |
22 | APIs | Scopes
23 | ---|---
24 | Adobe Stock | `openid`
25 | Creative SDK | `openid,creative_sdk`
26 | Photoshop | `openid,creative_sdk`
27 | Lightroom | `openid,creative_sdk`
28 |
29 |
30 |
31 |
32 | ## Experience Cloud
33 | Scopes for Experience Cloud OAuth based APIs
34 |
35 | APIs | Scopes
36 | ---|---
37 | Adobe Analytics | `openid,AdobeID,read_organizations,additional_info.projectedProductContext,additional_info.job_function`
38 |
39 |
40 |
41 | ## Scope Definitions
42 | The scope determines the type of access to protected resources an application can be granted authorization to. Scopes are aggregates of specific attributes.
43 |
44 | ### openid
45 |
46 | One-stop-shop scope for accessing Adobe user profile information.
47 |
48 | |Attribute|User Information Returned|
49 | |---|---|
50 | |userId|Unique ID|
51 | |first_name|Given name|
52 | |last_name|Surname or family name|
53 | |phoneNumber|Telephone number (NULL if unavailable)|
54 | |emailVerified|Verification status of primary email address|
55 | |countryCode|Country component of an ISO2 locale code|
56 | |name|Full name|
57 | |displayName|Display name|
58 | |email|Primary email address|
59 | |preferred_languages|An array of locale codes indicating preferred language settings|
60 | |account_type|The account_type with one of the values: type1 (individual), type2 (enterprise), type3 (federated). See [Adobe Identity Types](https://helpx.adobe.com/enterprise/using/identity.html) for details.|
61 |
62 | ### creative_sdk
63 |
64 | Intended for use specifically with the Creative SDK. This is an extension of the `openid` scope, so the following is a list of attributes *in addition* to what's available in the `openid` scope.
65 |
66 | |Attribute|User Information Returned|
67 | |---|---|
68 | |userId|Unique ID|
69 | |service_accounts|An array of service account objects used to provide permissions to Creative Cloud services|
70 |
--------------------------------------------------------------------------------
/AuthenticationOverview/APIKeyIntegration.md:
--------------------------------------------------------------------------------
1 | # API Key Connection
2 |
3 | A small collection of Adobe services (e.g. Adobe Stock) require authorization, but do not require authentication. These services can be called _“anonymously”_ and typically provide consistent results regardless of the application or user that made the request. An **API Key** is the only client credential required for these services. These connections do not need to pass an access token with each request.
4 |
5 | To obtain an API Key, you'll need to create an API Key connection using the Adobe Developer Console.
6 |
7 | > **Note:** If your application needs to access Adobe services or content on behalf of a user or an Adobe enterprise organization, it needs additional credentials for authentication. For more information, read the **[OAuth Authentication](OAuthIntegration.md)** and **[Service Account (JWT) Authentication](ServiceAccountIntegration.md)** documentation.
8 |
9 | This article will walk you through the steps to set up an **API Key** connection.
10 |
11 | ## API Key connection workflow
12 |
13 | [Step 1: Create a project in Adobe Developer Console](#step-1-create-a-project-in-adobe-developer-console)
14 |
15 | [Step 2: Add an API to your project using API Key authorization](#step-2-add-an-api-to-your-project-using-API-Key-authorization)
16 |
17 | [Step 3: Try It](#step-3-try-it)
18 |
19 | ### Step 1: Create a project in Adobe Developer Console
20 |
21 | Integrations are now created as part of a "project" within Adobe Developer Console. For complete steps to creating a project in Console, begin by reading the [Adobe Developer Console getting started guide](https://www.adobe.com/go/devs_console_getting_started) and [projects overview](https://www.adobe.com/go/devs_projects_overview).
22 |
23 | Once you have created a project, you will be able to add services including APIs, I/O Events, and I/O Runtime.
24 |
25 | ### Step 2: Add an API to your project using API Key authorization
26 |
27 | To add an API that uses API Key authorization, follow the steps outlined in the guide for [adding an API to a project using API Key authorization](https://www.adobe.com/go/devs_projects_api_key).
28 |
29 | When the API has been successfully connected, you will be able to access the newly generated API Key.
30 |
31 | ### Step 3: Try It
32 |
33 | Copy the API Key from the Adobe Developer Console project and replace `myAPIKey` in the sample request below.
34 |
35 | ```curl
36 | curl 'https://stock.adobe.io/Rest/Media/1/Search/Files?locale=en_US%26search_parameters%5Bwords%5D=kittens '
37 | -H 'x-api-key:myAPIKey'
38 | -H 'x-product:myTestApp1.0'
39 | ```
40 |
41 | Open Postman and go to `Import`->`Paste Raw Text` and paste the curl command. Select **Import** to import it.
42 |
43 | 
44 |
45 | Select **Send**. You will receive a successful response. Note that you did not need an access token in order to make a successful request using API Key integration.
46 |
47 | 
48 |
--------------------------------------------------------------------------------
/Backup/idTypes.md:
--------------------------------------------------------------------------------
1 | # Adobe-supported identity types
2 |
3 | Adobe uses an underlying identity management system to authenticate and authorize users. If you're using named licensing or are planning to provide access to services, using identities is a requirement. Adobe supports three identity or account types; they use an email address as the user name.
4 |
5 | ## Adobe ID (Type 1)
6 | Adobe ID is created, owned, and managed by the end user. Adobe performs the authentication and the end user manages the identity. Users retain complete control over files and data associated with their ID. Users can purchase additional products and services from Adobe. Admins invite users to join the organization, and can remove them. However, users cannot be locked out from their Adobe ID accounts. The admin can't delete or take over the accounts. No setup is necessary before you can start using Adobe IDs.
7 |
8 | Adobe recommends Adobe IDs for the following requirements:
9 |
10 | * To enable users to create, own, and manage their identities.
11 | * To allow users to purchase or sign up for other Adobe products and services.
12 | * When users are expected to use other Adobe services, which do not currently support Enterprise or Federated IDs.
13 | * When users already have Adobe IDs, and associated data such as files, fonts, or settings.
14 | * In Higher Education settings so that adult students can easily retain the same Adobe ID and account content upon graduation.
15 | * If you have contractors and freelancers who do not use email addresses on domains you control.
16 |
17 | ## Enterprise ID (Type 2)
18 | Enterprise ID is created, owned, and managed by an organization. Adobe hosts the Enterprise ID and performs authentication, but the organization maintains the Enterprise ID. End users cannot sign up and create an Enterprise ID, nor can they sign up for additional products and services from Adobe using an Enterprise ID.
19 |
20 | Admins create an Enterprise ID and issue it to a user. Admins can revoke access to products and services by taking over the account, or deleting the Enterprise ID to permanently block access to associated data.
21 |
22 | Adobe recommends Enterprise IDs for the following requirements:
23 |
24 | * To maintain strict control over apps and services available to a user.
25 | * For emergency access to files and data associated with an ID.
26 | * To have the ability to completely block or delete a user account.
27 | * In all K-12 user settings to ensure compliance with student privacy and other relevant laws.
28 |
29 | ## Federated ID (Type 3)
30 | Federated ID is created and owned by an organization, and linked to the enterprise directory via federation. The organization manages credentials and processes Single Sign-On via a SAML2 Identity Provider (IdP).
31 |
32 | Adobe recommends Federated IDs for the following requirements:
33 |
34 | * To provision users based on your organization's enterprise directory.
35 | * To manage authentication of users.
36 | * To maintain strict control over apps and services available to a user.
37 | * To allow users to use the same email address to sign up for an Adobe ID.
38 | * In all K-12 user settings to ensure compliance with student privacy and other relevant laws.
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Adobe Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as
6 | contributors and maintainers pledge to making participation in our project and
7 | our community a harassment-free experience for everyone, regardless of age, body
8 | size, disability, ethnicity, gender identity and expression, level of experience,
9 | nationality, personal appearance, race, religion, or sexual identity and
10 | orientation.
11 |
12 | ## Our Standards
13 |
14 | Examples of behavior that contributes to creating a positive environment
15 | include:
16 |
17 | * Using welcoming and inclusive language
18 | * Being respectful of differing viewpoints and experiences
19 | * Gracefully accepting constructive criticism
20 | * Focusing on what is best for the community
21 | * Showing empathy towards other community members
22 |
23 | Examples of unacceptable behavior by participants include:
24 |
25 | * The use of sexualized language or imagery and unwelcome sexual attention or
26 | advances
27 | * Trolling, insulting/derogatory comments, and personal or political attacks
28 | * Public or private harassment
29 | * Publishing others' private information, such as a physical or electronic
30 | address, without explicit permission
31 | * Other conduct which could reasonably be considered inappropriate in a
32 | professional setting
33 |
34 | ## Our Responsibilities
35 |
36 | Project maintainers are responsible for clarifying the standards of acceptable
37 | behavior and are expected to take appropriate and fair corrective action in
38 | response to any instances of unacceptable behavior.
39 |
40 | Project maintainers have the right and responsibility to remove, edit, or
41 | reject comments, commits, code, wiki edits, issues, and other contributions
42 | that are not aligned to this Code of Conduct, or to ban temporarily or
43 | permanently any contributor for other behaviors that they deem inappropriate,
44 | threatening, offensive, or harmful.
45 |
46 | ## Scope
47 |
48 | This Code of Conduct applies both within project spaces and in public spaces
49 | when an individual is representing the project or its community. Examples of
50 | representing a project or community include using an official project e-mail
51 | address, posting via an official social media account, or acting as an appointed
52 | representative at an online or offline event. Representation of a project may be
53 | further defined and clarified by project maintainers.
54 |
55 | ## Enforcement
56 |
57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
58 | reported by contacting the project team at Grp-opensourceoffice@adobe.com. All
59 | complaints will be reviewed and investigated and will result in a response that
60 | is deemed necessary and appropriate to the circumstances. The project team is
61 | obligated to maintain confidentiality with regard to the reporter of an incident.
62 | Further details of specific enforcement policies may be posted separately.
63 |
64 | Project maintainers who do not follow or enforce the Code of Conduct in good
65 | faith may face temporary or permanent repercussions as determined by other
66 | members of the project's leadership.
67 |
68 | ## Attribution
69 |
70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71 | available at [https://contributor-covenant.org/version/1/4][version]
72 |
73 | [homepage]: https://contributor-covenant.org
74 | [version]: https://contributor-covenant.org/version/1/4/
75 |
--------------------------------------------------------------------------------
/OAuth/samples/adobe-auth-python/adobe-oauth2.0.py:
--------------------------------------------------------------------------------
1 | import os
2 | import flask
3 | import requests
4 | from six.moves import urllib
5 | import json
6 |
7 | # Start flask app
8 | app = flask.Flask(__name__)
9 |
10 | # Load config object from config.py
11 | app.config.from_object('config.Config')
12 |
13 | # Loading FLAST_SECRET from config.py
14 | app.secret_key = app.config['FLASK_SECRET']
15 |
16 | @app.route('/')
17 | def home():
18 | return flask.render_template('index.html')
19 |
20 | @app.route('/authorize')
21 | def authorize():
22 | # Adobe OAuth2.0 authorization url
23 | authorization_url = 'https://ims-na1.adobelogin.com/ims/authorize?'
24 |
25 | # Store required parameters in a dictionary
26 | params = {
27 | 'client_id' : app.config['ADOBE_API_KEY'],
28 | 'scope' : 'openid,creative_sdk',
29 | 'response_type' : 'code',
30 | 'redirect_uri' : flask.url_for('callback', _external=True)
31 | }
32 |
33 | # This will prompt users with the approval page if consent has not been given
34 | # Once permission is provided, users will be redirected to the specified page
35 | return flask.redirect(authorization_url + urllib.parse.urlencode(params))
36 |
37 | @app.route('/callback')
38 | def callback():
39 | # Retrive the authorization code from callback
40 | authorization_code = flask.request.args.get('code')
41 |
42 | # Adobe OAuth2.0 token url
43 | token_url = 'https://ims-na1.adobelogin.com/ims/token'
44 |
45 | # Store required parameters in a dictionary
46 | # And include the authorization code in it
47 | params = {
48 | 'grant_type' : 'authorization_code',
49 | 'client_id' : app.config['ADOBE_API_KEY'],
50 | 'client_secret' : app.config['ADOBE_API_SECRET'],
51 | 'code' : authorization_code
52 | }
53 |
54 | # Use requests library to send the POST request
55 | response = requests.post(token_url,
56 | params = params,
57 | headers = {'content-type': 'application/x-www-form-urlencoded'})
58 |
59 | # After receiving a 'OK' response,
60 | if response.status_code == 200:
61 | # save credentials to session
62 | flask.session['credentials'] = response.json()
63 | return flask.render_template('index.html', response='login success')
64 | else:
65 | return flask.render_template('index.html', response='login failed')
66 |
67 | @app.route('/profile')
68 | def profile():
69 | # Check if credentials exist. If not, ask the user to log in
70 | if 'credentials' not in flask.session:
71 | return flask.render_template('index.html', response='Please log in first')
72 | else:
73 | # Retrive the access token from the flask session
74 | access_token = flask.session['credentials']['access_token']
75 |
76 | # Adobe OAuth2.0 profile url
77 | profile_url = 'https://ims-na1.adobelogin.com/ims/userinfo'
78 |
79 | # Store required parameters in a dictionary
80 | params = {
81 | 'client_id' : app.config['ADOBE_API_KEY']
82 | }
83 |
84 | # Use requests library to send the GET request
85 | response = requests.get(profile_url,
86 | params = params,
87 | headers = {'Authorization': 'Bearer {}'.format(access_token)})
88 |
89 | if response.status_code == 200:
90 | return flask.render_template('index.html', response=json.dumps(response.json()))
91 | else:
92 | return flask.render_template('index.html', response='profile could not be retrieved')
93 |
94 | if __name__ == '__main__':
95 | # Make sure the hostname and port you provide match the valid redirect URI
96 | # specified in your project in the Adobe developer Console.
97 | # Also, make sure to have `cert.pem` and `key.pem` in your directory
98 | app.run('localhost', 8000, debug=True, ssl_context=('cert.pem', 'key.pem'))
--------------------------------------------------------------------------------
/JWT/samples/adobe-jwt-dotnet/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Security.Cryptography.X509Certificates;
3 | using Jose;
4 | using RestSharp;
5 | using System.Collections.Generic;
6 |
7 | //NuGet packages: Jose and RestSharp
8 |
9 | namespace adobe_jwt_dotnet
10 | {
11 | class Program
12 | {
13 | static void Main(string[] args)
14 | {
15 | //Copy these details from console.adobe.io integration
16 | const string CLIENT_ID = "YOUR API KEY (CLIENT ID)"; //e.g. ......328adcb8062d
17 | const string CLIENT_SECRET = "YOUR CLIENT SECRET"; //e.g. ......-ad95-70e50b6b4ea3
18 | const string TECH_ACC_ID = "YOUR TECHNICAL ACCOUNT ID"; //e.g. ......0A495C2A@techacct.adobe.com
19 | const string ORG_ID = "YOUR ORGANIZATION ID"; //e.g. ......0A495D09@AdobeOrg
20 | const string METASCOPES = "YOUR METASCOPES IN COMMA SEPARATED FORMAT"; //e.g. "https://ims-na1.adobelogin.com/s/ent_reactor_developer_sdk,https://ims-na1.adobelogin.com/s/ent_reactor_admin_sdk"
21 |
22 |
23 | Dictionary