From f1cb9f42ff1259fca91a34032f4e0d7310c7496b Mon Sep 17 00:00:00 2001 From: Mark Hendrickson Date: Wed, 17 Jun 2020 14:47:22 +0200 Subject: [PATCH] Rewrite todos tutorial with Blockstack Connect; update tutorials nav --- _data/navigation.yml | 4 +- browser/images/todo-app.png | Bin 39568 -> 0 bytes browser/images/todo-sign-in.png | Bin 41803 -> 0 bytes browser/images/todos-copy-secret-key.svg | 162 +++++++++ browser/images/todos-empty.svg | 52 +++ browser/images/todos-generation.svg | 158 +++++++++ browser/images/todos-home-authenticated.svg | 128 +++++++ browser/images/todos-home.png | Bin 0 -> 21722 bytes browser/images/todos-intro.svg | 70 ++++ browser/images/todos-ive-saved-it.svg | 183 ++++++++++ browser/images/todos-public.svg | 81 +++++ browser/images/todos-username.svg | 143 ++++++++ browser/todo-list.md | 359 +++++++++----------- develop/overview_auth.md | 42 ++- 14 files changed, 1184 insertions(+), 198 deletions(-) delete mode 100644 browser/images/todo-app.png delete mode 100644 browser/images/todo-sign-in.png create mode 100644 browser/images/todos-copy-secret-key.svg create mode 100644 browser/images/todos-empty.svg create mode 100644 browser/images/todos-generation.svg create mode 100644 browser/images/todos-home-authenticated.svg create mode 100644 browser/images/todos-home.png create mode 100644 browser/images/todos-intro.svg create mode 100644 browser/images/todos-ive-saved-it.svg create mode 100644 browser/images/todos-public.svg create mode 100644 browser/images/todos-username.svg diff --git a/_data/navigation.yml b/_data/navigation.yml index 7d65230d..19dd34c9 100644 --- a/_data/navigation.yml +++ b/_data/navigation.yml @@ -1,8 +1,6 @@ -- title: Get Started +- title: Tutorials docs: - - browser/hello-blockstack - browser/todo-list - - browser/blockstack_storage - title: Authentication docs: diff --git a/browser/images/todo-app.png b/browser/images/todo-app.png deleted file mode 100644 index f8a9751603b41b7308ac5aa50889e7b08cd934fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39568 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 uik|rOBT@O%wN`u{r)wAm;G_gB`++P}&6 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%0DHgpwStRO{kLMbp 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/browser/images/todos-empty.svg b/browser/images/todos-empty.svg new file mode 100644 index 00000000..4229c805 --- /dev/null +++ b/browser/images/todos-empty.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/browser/images/todos-generation.svg b/browser/images/todos-generation.svg new file mode 100644 index 00000000..42b08565 --- /dev/null +++ b/browser/images/todos-generation.svg @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/browser/images/todos-home-authenticated.svg b/browser/images/todos-home-authenticated.svg new file mode 100644 index 00000000..ca027b85 --- /dev/null +++ b/browser/images/todos-home-authenticated.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/browser/images/todos-home.png b/browser/images/todos-home.png new file mode 100644 index 0000000000000000000000000000000000000000..01293956d9165ac371650099abdb3c70bc5b983c GIT binary patch literal 21722 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 H+PwZ>0IP~W literal 0 HcmV?d00001 diff --git a/browser/images/todos-intro.svg b/browser/images/todos-intro.svg new file mode 100644 index 00000000..fbf91c57 --- /dev/null +++ b/browser/images/todos-intro.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/browser/images/todos-ive-saved-it.svg b/browser/images/todos-ive-saved-it.svg new file mode 100644 index 00000000..49c344f0 --- /dev/null +++ b/browser/images/todos-ive-saved-it.svg @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/browser/images/todos-public.svg b/browser/images/todos-public.svg new file mode 100644 index 00000000..472adc64 --- /dev/null +++ b/browser/images/todos-public.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/browser/images/todos-username.svg b/browser/images/todos-username.svg new file mode 100644 index 00000000..99727b21 --- /dev/null +++ b/browser/images/todos-username.svg @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/browser/todo-list.md b/browser/todo-list.md index 7426dfc8..d5529144 100644 --- a/browser/todo-list.md +++ b/browser/todo-list.md @@ -3,291 +3,264 @@ description: Single-page application with Blockstack --- -# Todo List +# Todos app {:.no_toc} -In this tutorial, you build the code for and run a single-page application (SPA) -with Blockstack and React. Once the application is running, you take a tour -through the applications’ Blockstack functionality. You’ll learn how it manages -authentication using a Blockstack ID and how it stores information associated -with that ID using Blockstack Storage (Gaia). +In this tutorial, you will learn about Blockstack authentication and storage by installing, running and reviewing the code for a "Todos" web app built with Blockstack and [React](https://reactjs.org/). + +This app highlights the following platform functionality: + +- Generate Secret Key with associated Blockstack username to authenticate app +- Add, edit and delete encrypted app data with Gaia +- Decrypt data on Gaia for public sharing by URL +- Unauthenticate and re-authenticate app with Secret Key + +[Preview the app](https://todos.blockstack.org) or [view its code on GitHub](https://github.com/blockstack/blockstack-todos). + +Existing familiarity with React is recommended for reviewing this app's code. * TOC {:toc} -{% include note.html content="On macOS, Blockstack requires macOS High Sierra. This tutorial was written on macOS High Sierra 10.13.4. If you use a Windows or Linux system, you can still follow along. However, you will need to \"translate\" appropriately for your operating system. Additionally, this tutorial assumes you are accessing the Blockstack Browser web application via Chrome. The application you build will also work with a local installation and/or with browsers other than Chrome. " %} +### Install and run the app -## Before you begin +You must have recent versions of Git and [Node.js](https://nodejs.org/en/download/) (v12.10.0 or greater) installed already. -The application you build is a React application that is completely decentralized and server-less. While not strictly required to follow along, basic familiarity with React is helpful. When complete, the app is capable of the following: -* authenticating users using Blockstack -* posting new statuses -* displaying statuses in the user profile -* looking up the profiles and statuses of other users +1. Install the code and its dependencies: -For this tutorial, you will use the following tools: + ``` + git clone https://github.com/blockstack/blockstack-todos + cd blockstack-todos + npm install + ``` -* your workstation's command line -- Node.js v10 or higher is recommended the minimum supported version is Node.js v8. +2. Run the application: -The basic identity and storage services are provided by blockstack.js. To test the application, you need to have already registered a Blockstack ID. + ```bash + $ npm run start + ``` + + You should see output similar to the following: -### Verify you have Node.js and its tools installed + ```bash + Compiled successfully! -The tutorial relies on Node.js and its `npx` or `npm` tools. Before you begin, verify you have the correct version of Node.js and its tools installed. + You can now view bs-todo in the browser. -```bash -$ node -v -v12.10.0 -$ which npm npx -/usr/local/bin/npm -/usr/local/bin/npx -``` + http://127.0.0.1:3000/ -If you don't, make sure they are installed. + Note that the development build is not optimized. + To create a production build, use npm run build. + ``` -### Make sure you have a Blockstack ID +2. Open your local browser to `http://localhost:3000` if it doesn't open automatically. + + You should see the app's landing page: -Finally, make sure you have [created at least one Blockstack ID]({{site.baseurl}}/browser/ids-introduction.html#create-an-initial-blockstack-id). -You’ll use this ID to interact with the application. + ![](images/todos-home.png) -## Task 1: Install the code and retrieve the dependencies +### Onboard into your first Blockstack app -You can clone the source code with `git` or [download and unzip the code from the repository](https://github.com/blockstack/blockstack-todos/archive/master.zip). These instructions assume you are cloning. +1. Choose **Get started** to start onboarding into the app. + The app displays a standardized introductory modal using [Blockstack Connect](https://github.com/blockstack/ux/tree/master/packages/connect), a JavaScript library that makes it easy to integrate Blockstack into the UI of any web app. -1. Install the code by cloning it. + ![](images/todos-intro.svg) + + The following [React component](https://reactjs.org/docs/react-component.html) triggers this modal in [`src/components/Signin.js`](https://github.com/blockstack/blockstack-todos/blob/master/src/components/Signin.js): ``` - $ git clone https://github.com/blockstack/blockstack-todos - ``` + import React from 'react'; + import '../styles/Signin.css' + import { useConnect } from '@blockstack/connect'; + + export const Signin = () => { + const { doOpenAuth } = useConnect(); + + return ( +
+

Hello, Blockstack!

+

+ +

+
+ ); + } -2. Change to directory to the root of the code. + export default Signin; ``` - $ cd blockstack-todos - ``` - If you downloaded the zip file, the contents unzip into a `blockstack-todos-master` directory. + This component imports the [React hook](https://reactjs.org/docs/hooks-overview.html) [`useConnect`](https://github.com/blockstack/ux/blob/master/packages/connect/src/react/hooks/use-connect.ts) from the Blockstack Connect library. + `useConnect` returns many helper functions such as [`doOpenAuth`](https://github.com/blockstack/ux/blob/5934829a40338ac269b80783912c8dad17af1962/packages/connect/src/react/hooks/use-connect.ts#L33), which triggers this modal upon click of the "Get started" button. -3. Use `npm` to install the dependencies. + The modal is designed to prepare new users for a different type of relationship with Blockstack apps, one in which they authenticate with a *Secret Key* that's used to encrypt their private data. + The modal displays the app's name and icon as configured in [`src/components/App.js`](https://github.com/blockstack/blockstack-todos/blob/f6ab7b38f3f9bd98a900c7f285da4f4dd9768d60/src/components/App.js#L26): ``` - $ npm install - ``` -The Todo application has a basic React structure. There are several configuration files but the central programming files are in the `src/components` directory: + appDetails: { + name: 'Blockstack App', + icon: window.location.origin + '/favicon.ico' + } -| File | Description | -| ----------------------- | ------------------------------------------- | -| `index.js` | Application initialization. | -| `components/App.js ` | Code for handling the `authResponse`. | -| `components/Signin.js ` | Code for the initial sign on page. | -| `components/Profile.js` | Application data storage and user sign out. | + ``` -## Task 2: Sign into the application + This component loads the [`UserSession`](https://blockstack.github.io/blockstack.js/classes/usersession.html) module from a second Blockstack library called [blockstack.js](https://github.com/blockstack/blockstack.js/), which complements Blockstack Connect by providing an API for many protocol-level operations, such as for authentication and storage. -The example application runs in a node server on your local host. In the this section, you start the application and interact with it. + ``` -1. Make sure you are in the root of the code base. + import { UserSession } from 'blockstack'; + import { appConfig } from '../assets/constants' - ```bash - $ pwd - /Users/meepers/repos/blockstack-todos - ``` - - This path will be different for you, but double-check the last part to ensure that you're in the directory into which you cloned and in which you ran `npm install`. + ... -2. Start the application in your local environment. + const userSession = new UserSession({ appConfig }) - ```bash - $ npm run start ``` - - You should see output similar to the following: - ```bash - Compiled successfully! - - You can now view bs-todo in the browser. + This module handles user session operations and is initiated using the [`appConfig`](https://github.com/blockstack/blockstack-todos/blob/f6ab7b38f3f9bd98a900c7f285da4f4dd9768d60/src/assets/constants.js#L3) object, which contains an array of [scopes](/develop/overview_auth.html#scopes) that indicate just what permissions to grant during authentication: - http://127.0.0.1:3000/ + ``` + export const appConfig = new AppConfig(['store_write', 'publish_data']) + ``` - Note that the development build is not optimized. - To create a production build, use npm run build. - ``` + The `appDetails` and `userSession` objects are joined by the callback function [`finished`](https://github.com/blockstack/blockstack-todos/blob/f6ab7b38f3f9bd98a900c7f285da4f4dd9768d60/src/components/App.js#L31) in configuring Blockstack Connect for authentication with the `authOptions` object: -2. Open your local browser to the `http://localhost:3000` URL. - - You should see a simple application: + ``` + finished: ({ userSession }) => { + this.setState({ userData: userSession.loadUserData() }); + } - ![](images/todo-sign-in.png) + ``` - 3. Choose **Sign In with Blockstack**. + This function simply saves data about the user into the app's state upon authentication. - If you have already signed into Blockstack the application prompts you to select the ID to use. If you aren’t signed in, Blockstack prompts you to: + Further down in the component we see in [`componentDidMount`](https://github.com/blockstack/blockstack-todos/blob/f6ab7b38f3f9bd98a900c7f285da4f4dd9768d60/src/components/App.js#L46) that it checks upon mount to either process completion of authentication with `userSession.handlePendingSignIn()` or otherwise load session data into app state as above with `userSession.isUserSignedIn()`: - ![](images/login-choice.png) + ``` + componentDidMount() { + if (userSession.isSignInPending()) { + userSession.handlePendingSignIn().then((userData) => { + window.history.replaceState({}, document.title, "/") + this.setState({ userData: userData}) + }); + } else if (userSession.isUserSignedIn()) { + this.setState({ userData: userSession.loadUserData() }); + } + } + ``` - If the login to the application is successful, the user is presented with the application: - ![](images/todo-app.png) +2. Choose **Get started** to generate a *Secret Key*. -## Task 3: Learn about the sign in process + The app triggers a popup window in which [the Blockstack App](https://github.com/blockstack/ux/tree/master/packages/app) is loaded from [`app.blockstack.org`](http://app.blockstack.org/) and begins generating a new *Secret Key*. -{% include sign_in.md %} + ![](images/todos-generation.svg) +3. Choose **Copy Secret Key** to copy your *Secret Key* to the clipboard. -## Task 4: Decode the authRequest + The *Secret Key* is a unique 12-word [mnemonic phrase](https://en.bitcoinwiki.org/wiki/Mnemonic_phrase) that empowers the user not only to access Blockstack apps securely and independently. It's also used to encrypt all of the private data they create and manage with Blockstack apps. -To decode the token and see what information it holds: + *Secret Keys* are like strong passwords. However, they can never be recovered if lost or reset if stolen. As such, it's paramount that users handle them with great care. -1. Copy the `authRequest` string from the URL. + ![](images/todos-copy-secret-key.svg) - +4. Choose **I've saved it** to confirm you've secured your *Secret Key* in a suitable place. -2. Navigate to [jwt.io](https://jwt.io/). -3. Paste the full token there. + ![](images/todos-ive-saved-it.svg) - The output should look similar to below: +5. Enter a username value and choose **Continue** - ```json - { - "jti": "f65f02db-9f42-4523-bfa9-8034d8edf459", - "iat": 1555641911, - "exp": 1555645511, - "iss": "did:btc-addr:1ANL7TNdT7TTcjVnrvauP7Mq3tjcb8TsUX", - "public_keys": [ - "02f08d5541bf611ded745cc15db08f4447bfa55a55a2dd555648a1de9759aea5f9" - ], - "domain_name": "http://localhost:8080", - "manifest_uri": "http://localhost:8080/manifest.json", - "redirect_uri": "http://localhost:8080", - "version": "1.3.1", - "do_not_include_profile": true, - "supports_hub_url": true, - "scopes": [ - "store_write", - "publish_data" - ] - } - ``` + The username will be used by the app to generate a URL for sharing your todos, should you choose to make them public. - The `iss` property is a decentralized identifier or `did`. This identifies the user and the user name to the application. The specific `did` is a `btc-addr`. + It is registered on the Stacks blockchain with the [Blockstack Naming System (BNS)](/core/naming/introduction.html) and associated with your *Secret Key*. -## Task 5: Under the covers in the sign in code + ![](images/todos-username.svg) -Now, go to the underlying `blockstack-todo` code you cloned or downloaded. Sign -in and sign out is handled in each of these files: +6. You've now completed onboarding into the app! -| File | Description | -| ----------------------- | ------------------------------------------- | -| `components/App.js ` | Code for handling the `authResponse`. | -| `components/Signin.js ` | Code for the initial sign on page. | -| `components/Profile.js` | Application data storage and user sign out. | +### Add, edit and delete todos privately - +Once you've authenticated the app, you can can start adding todos by entering values into the "Write your to do" field and hitting "Enter". -The `src/components/App.js` code configures a `UserSession` and other `authOptions`, which are passed to the `Connect` component. The `Connect` component acts as a "provider" for the rest of your application, and essentially creates a re-usable configuration for you. +![](images/todos-home-authenticated.svg) -In the `src/components/Signin.js` component, we are then calling the `useConnect` hook. This hook returns many helper functions, one of which is `doOpenAuth`. Calling this method will being the authentication process. First, it injects a modal into your application, which acts as a way of "warming up" your user to Blockstack authentication. When the user continues, they are redirected to the Blockstack authenticator, where they can finish signing up. +The data for all todos are saved as JSON to the Gaia hub linked to your Secret Key using the [`putFile`](http://blockstack.github.io/blockstack.js/globals.html#putfile) method of the `userSession` object in the [`src/components/Profile.js`](https://github.com/blockstack/blockstack-todos/blob/f6ab7b38f3f9bd98a900c7f285da4f4dd9768d60/src/components/Profile.js#L50) component: -```js -import React from 'react'; -import { useConnect } from '@blockstack/connect'; - -export const Signin = () => { - const { doOpenAuth } = useConnect(); - - return ( - - ) -}; +``` +saveTasks(tasks, encrypt) { + const options = { encrypt: encrypt ? true : encrypt }; + this.props.userSession.putFile(TASKS_FILENAME, JSON.stringify(tasks), options); +} ``` -Once the user authenticates, the application handles the `authResponse` in the `src/components/Profile.js` file. : +These todos are subsequently loaded using the [`getFile`](http://blockstack.github.io/blockstack.js/globals.html#getfile) method of the same object in the same component: -```js -... -componentWillMount() { - if (userSession.isSignInPending()) { - userSession.handlePendingSignIn().then((userData) => { - //if (!userData.username) { - // throw new Error('This app requires a username.') - //} - window.location = window.location.origin; - }); - } - } -... +``` +loadTasks() { + const options = { decrypt: true }; + this.props.userSession.getFile(TASKS_FILENAME, options) + .then((content) => { + if(content) { + const tasks = JSON.parse(content); + this.setState({tasks}); + } + }) +} ``` -If [`isUserSignedIn()`](https://blockstack.github.io/blockstack.js/#isusersignedin) is true, the user was previously signed in so Blockstack pulls the data from the browser and uses it in our application. If the check on [`UserSession.isSignInPending()`](https://blockstack.github.io/blockstack.js/#issigninpending) is true, a previous `authResponse` was sent to the application but hasn't been processed yet. The `handlePendingSignIn()` function processes any pending sign in. +By default, the `putFile` and `getFile` methods automatically encrypt data when saved and decrypt it when retrieved, using the user's Secret Key. This ensures that only the user has the ability to view this data. -Signout is handled in `src/components/App.js`. +When deleting a todo, the same `putFile` method is used to save a new JSON array of todos that excludes the deleted todo. -```js - handleSignOut(e) { - e.preventDefault(); - userSession.signUserOut(window.location.origin); - } -``` +### Publish your todos publicly + +If you wish to make your todos accessible to the public for sharing via URL, select "Make public". -The method allows the application creator to decide where to redirect the user upon Sign Out: +![](images/todos-public.svg) +This will call the [`makePublic`](#) method of the `Profile.js` component, which in turn calls `saveTasks` with the `encrypt` parameter set to `false`, which is used to disable encryption when using `putFile`: -## Task 6: Work with the application +``` +makePublic() { + const tasks = remove(e.currentTarget.dataset.index, this.state); + this.saveTasks(tasks, false); +} + +saveTasks(tasks, encrypt) { + const options = { encrypt: encrypt ? true : encrypt }; + this.props.userSession.putFile(TASKS_FILENAME, JSON.stringify(tasks), options); +} +``` -Now, trying adding a few items to the todo list. For example, try making a list of applications you want to see built on top of Blockstack: +The app will now show all of your todos to anyone who visits the URL displayed with your Blockstack username as a suffix. -![](images/make-a-list.png) -Each list is immediately stored in the Gaia Hub linked to your Blockstack ID. -For more information about the Gaia hub, [see the overview in this documentation]({{ site.baseurl }}/storage/overview.html#). Now that you have seen the application in action, dig into how it works. +### Sign out and back in -## Task 7: Implement storage -Go to the underlying `blockstack-todo` code you cloned or downloaded. The application interactions with your Gaia Hub originate in the `src/components/Profile.js` file. First, examine where the changes to the Todos are processed in the `Profile.js` file. -The code needs to read the Todo items from the storage with the [`getFile()`](https://blockstack.github.io/blockstack.js/#getfile) method which returns a promise: -```js - loadTasks() { - const options = { decrypt: true }; - this.props.userSession.getFile(TASKS_FILENAME, options) - .then((content) => { - if(content) { - const tasks = JSON.parse(content); - this.setState({tasks}); - } - }) - } -``` -The `todos` data is retrieved from the promise. By default, the `getFile()` decrypts data for you. For more information on the available options, see the
the blockstack.js library for details on the `GetFileOptions` interface. -During the creation of a `todos`, a JSON object is passed in and the [`putFile()`](https://blockstack.github.io/blockstack.js/#putfile) method to store it in a Gaia Hub. By default, `putFile()` encrypts data when it stores it. + +Signout is handled in `src/components/App.js`. ```js -saveTasks(tasks) { - const options = { encrypt: true }; - this.props.userSession.putFile(TASKS_FILENAME, JSON.stringify(tasks), options); + handleSignOut(e) { + e.preventDefault(); + userSession.signUserOut(window.location.origin); } ``` -## Summary -{:.no_toc} - -You now have everything you need to construct complex applications complete with authentication and storage on the Decentralized Internet. Why not try coding [a sample application that accesses multiple profiles](blockstack_storage.html). - -If you would like to explore the Blockstack APIs, you can visit the [Stacks Node API](https://core.blockstack.org/) documentation or the [Blockstack JS API](https://blockstack.github.io/blockstack.js). - -Go forth and build! \ No newline at end of file diff --git a/develop/overview_auth.md b/develop/overview_auth.md index 7fd82def..d91129bb 100644 --- a/develop/overview_auth.md +++ b/develop/overview_auth.md @@ -17,8 +17,9 @@ Blockstack Auth provides single sign on and authentication without third parties ## Scopes -Scopes define the permissions requested from, and that a user accepts, through the sign-in dialog. -Decentralized apps may request any of the following scopes: +Scopes define the permissions requested by an app for granting during authentication. + +Apps may request any of the following scopes: | Scope | Definition | | -------------- | ------------------------------------------------------------------------------------ | @@ -155,3 +156,40 @@ const requestPayload = { version // version tuple } ``` + +## Decode authRequest + +To decode the token and see what information it holds: + +1. Copy the `authRequest` string from the URL. + + + +2. Navigate to [jwt.io](https://jwt.io/). +3. Paste the full token there. + + The output should look similar to below: + + ```json + { + "jti": "f65f02db-9f42-4523-bfa9-8034d8edf459", + "iat": 1555641911, + "exp": 1555645511, + "iss": "did:btc-addr:1ANL7TNdT7TTcjVnrvauP7Mq3tjcb8TsUX", + "public_keys": [ + "02f08d5541bf611ded745cc15db08f4447bfa55a55a2dd555648a1de9759aea5f9" + ], + "domain_name": "http://localhost:8080", + "manifest_uri": "http://localhost:8080/manifest.json", + "redirect_uri": "http://localhost:8080", + "version": "1.3.1", + "do_not_include_profile": true, + "supports_hub_url": true, + "scopes": [ + "store_write", + "publish_data" + ] + } + ``` + + The `iss` property is a decentralized identifier or `did`. This identifies the user and the user name to the application. The specific `did` is a `btc-addr`. \ No newline at end of file