From 2ea4b927e7aafe37a346e4c4222efc20618ad135 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Gomes?= <39063808+cerberushades@users.noreply.github.com> Date: Tue, 3 Oct 2023 15:17:48 +0400 Subject: [PATCH 1/5] Includes Push Notification guide --- docs/wallet/push-notification.md | 126 +++++++++++++++++++++++++++++++ sidebars.js | 3 +- static/img/wallet/push.png | Bin 0 -> 55413 bytes 3 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 docs/wallet/push-notification.md create mode 100644 static/img/wallet/push.png diff --git a/docs/wallet/push-notification.md b/docs/wallet/push-notification.md new file mode 100644 index 00000000..fb1807a9 --- /dev/null +++ b/docs/wallet/push-notification.md @@ -0,0 +1,126 @@ +--- +id: push-notification +title: Push Notifications +sidebar_label: Push Notifications +description: Implement push notifications on your app. +keywords: + - docs + - polygon id + - wallet + - push notification +--- + +import useBaseUrl from '@docusaurus/useBaseUrl'; + +## Guide + +Currently, to be able to implement a notification flow for a certain app, this app must be registered in the push gateway config. This can result in a centralization point for developers who want to use such feature and some expenses and efforts on support of the current gateway. + +For the Polygon ID wallet, this push service is used: [http://push.polygonid.me](http://push.polygonid.me). + +Current notification flow: + +![push](/img/wallet/push.png) + +1. User creates a device push token. After scanning the authorization request, the user must prepare an authorization response according to the current rules, but with an addition: the inclusion of the DID document. This +DID document contains the user DID and service to send push notifications. The user encrypts the device push token with the Push Gateway public encryption key and embeds it onto the DID document. +2. Verifier sends a message to Push Gateway with information from the user DID document. +3. Push Gateway decrypts push token, stores messages, and sends the push notification to the wallet. +4. The wallet gets the message with the message ID and PPG URL. The application fetches notifications from the service, handles protocol messages and asks the user if he wants to perform a needed action, e.g. fetch credential. + +**Glossary:** + +- *wallet* - mobile application published by Polygon. +- *verifier* - backend for Polygon Verify application that verifies user documents. +- *Push Gateway (PG)* - service to deliver push notifications to the wallet app. +- *Push notification* - notification that contains a link to protocol message or protocol message itself that is delivered through the notification provider. + +## How to run a server + +1. Go to [this link](https://github.com/iden3/notification-service) and follow the instructions to run your own push notification service. + 1. For a Push Gateway service a sygnal is used. Sygnals can send notifications to Android and Apple devices. For Android devices, a sygnal has integration with FCM; for Apple devices, the sygnal has APNS integration. Also, we can add any other provider like SNS. For this we must implement the next flow. + 2. Default algorithm for encryption is `RSA-OAEP-512` +2. Register your application on a Firebase provider and update config. +3. Get public key of notification service for further encryption actions. + +## How to send an AuthorizationResponse from mobile with push information + +1. Create a simple DID document + +```json +{ + "@context": [ + "https://www.w3.org/ns/did/v1" + ], + "id": "did:polygonid:polygon:mumbai:2qDj9EDytmvtQP1or3FxykXGEaqSA1ss479MYHDMJc" +} +``` + +You can add information about keys / authentication info optionally. Follow [this specification](https://github.com/0xPolygonID/did-polygonid/blob/main/did-polygonid-method-draft.md) + +1. Create encrypted device information. +Device information must be a valid JSON and encrypted with the public key of the Push Gateway. Apply base64 encoding to encrypted byte array. +An encryption key must be used from the notification service. + +```json +{ + "app_id": "...", + "pushkey": "push key", +} +``` + +1. Add push service for DID document to service section + + ```json + { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://schema.iden3.io/core/jsonld/auth.jsonld" + ], + "id": "did:polygonid:polygon:mumbai:2qDj9EDytmvtQP1or3FxykXGEaqSA1ss479MYHDMJc", + "service": { + "id": "did:polygonid:polygon:mumbai:2qDj9EDytmvtQP1or3FxykXGEaqSA1ss479MYHDMJc#push", + "type": "push-notification", + "serviceEndpoint": "https://push.polygonid.me", + "metadata": { + "devices": [ + { + "ciphertext": "sIyhw8MsRzFTMXnPvvPnjpj38vVHK9z7w/DvHzX+i/68hSjWfSDjXUA49KopWexyoVsAhenS+AS7+JkatJ3+OTlNxUD+lFrAIJUE51qBiM7l7mmkAuryybUQmOgWJCbuUU2nsWFKzIvk2ZTxcMh5EoUxYV2/0HaTmYYTDkzCKQr/oVePlHbiKwG6XjjMCuNaooSAO7UlLduEZY9CjCWBahiJ7LPHq5+SMCSpA9DdxlYe5IDY7ZT0Yg8fmEAq5+ZGvPVDzk1SdXvZNtG/2yygb3ILrSHXN81ztJRPdsEjzctqWwIhP1zEncSMnNEY4vtxEc1red4PuNT6QX0EoP/aX4LdSGIgfM3KB6yjqKBOqgIGoTFih0h/YzcC42lv4oJw0t5obX+32FM8pzQBUoXMvV0F9WpNgDcN04F3/Su9GGRLFNLXApCtj2Mh4H0qnkjMzRMO42RTd3258HYH7U8xK48hpO0Wolt+rn3jrk/JXrVQqO/9EnhCu/PJL1+AoeVtTYL0zp57OWnIAXbW98MGg0pm0MpYwH51hmHx0YLH+4Fkqj30ydcZQhV3xtAVgvKfxQOwwNz2WhIefm+fwYLVAQB4SjUMOrRQYAos7PWgoc21I0QFu52dIA4IvYYBws2Vjb1LvssdFnrd4kUYbC7THdlWONfunbp9xgofzXTrj2g=", + "alg": "RSA-OAEP-512" + } + ] + } + } + } + ``` + +2. Include the DID document as a `did_doc` field in the authorization response message [https://iden3-communication.io/authorization/1.0/response/](https://iden3-communication.io/authorization/1.0/response/) +3. Notification message format that is expected to be sent to mobile. URL field is a valid URL to fetch a message. Fetch request must be HTTP GET request with no authorization required. The message is available for 24 hours on Push gateway or deleted after the fetch request. + +```json +{ + "id": "...", + "url": "..." +} +``` + +## How to send a push from verifier + +1. Parse a dDIDd document from the authorization response +2. Proxy device info to push service using serviceEndpoint using the following format + 1. Message is the protocol message that is meant to be delivered to users + 2. Devices is an object from the push notification service from user DID document + + ```json + { + "message": "JSON stringlied message", + "metadata": { + "devices": [ + { + "ciphertext": "...", + "alg": "..." + } + ] + } + } + ``` diff --git a/sidebars.js b/sidebars.js index c1f81359..f873b00d 100644 --- a/sidebars.js +++ b/sidebars.js @@ -285,7 +285,8 @@ module.exports = { "wallet/wallet-sdk/polygonid-app", "wallet/features" ] - } + }, + "wallet/push-notification" ], }, "smart-contracts", diff --git a/static/img/wallet/push.png b/static/img/wallet/push.png new file mode 100644 index 0000000000000000000000000000000000000000..22bbec0be35489517f0fec8ee297e5ed22b84d82 GIT binary patch literal 55413 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⩔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 LrBEqneeZt(wK>^M literal 0 HcmV?d00001 From a01f39103db57a59267f4d8c32d5d4a2a0c47029 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Gomes?= <39063808+cerberushades@users.noreply.github.com> Date: Mon, 9 Oct 2023 13:19:11 -0300 Subject: [PATCH 2/5] Update docs/wallet/push-notification.md Co-authored-by: vmidyllic <74898029+vmidyllic@users.noreply.github.com> --- docs/wallet/push-notification.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/wallet/push-notification.md b/docs/wallet/push-notification.md index fb1807a9..bb3f3062 100644 --- a/docs/wallet/push-notification.md +++ b/docs/wallet/push-notification.md @@ -58,7 +58,7 @@ DID document contains the user DID and service to send push notifications. The u You can add information about keys / authentication info optionally. Follow [this specification](https://github.com/0xPolygonID/did-polygonid/blob/main/did-polygonid-method-draft.md) -1. Create encrypted device information. +2. Create encrypted device information. Device information must be a valid JSON and encrypted with the public key of the Push Gateway. Apply base64 encoding to encrypted byte array. An encryption key must be used from the notification service. From 35f179750db21559def3a226e8f148c87b4bfa84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Gomes?= <39063808+cerberushades@users.noreply.github.com> Date: Mon, 9 Oct 2023 13:19:18 -0300 Subject: [PATCH 3/5] Update docs/wallet/push-notification.md Co-authored-by: vmidyllic <74898029+vmidyllic@users.noreply.github.com> --- docs/wallet/push-notification.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/wallet/push-notification.md b/docs/wallet/push-notification.md index bb3f3062..5e14d205 100644 --- a/docs/wallet/push-notification.md +++ b/docs/wallet/push-notification.md @@ -69,7 +69,7 @@ An encryption key must be used from the notification service. } ``` -1. Add push service for DID document to service section +3. Add push service for DID document to service section ```json { From beccca42aacc70451955fae0e7d0800174f2aab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Gomes?= <39063808+cerberushades@users.noreply.github.com> Date: Mon, 9 Oct 2023 13:19:24 -0300 Subject: [PATCH 4/5] Update docs/wallet/push-notification.md Co-authored-by: vmidyllic <74898029+vmidyllic@users.noreply.github.com> --- docs/wallet/push-notification.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/wallet/push-notification.md b/docs/wallet/push-notification.md index 5e14d205..8e8ad4f5 100644 --- a/docs/wallet/push-notification.md +++ b/docs/wallet/push-notification.md @@ -94,7 +94,7 @@ An encryption key must be used from the notification service. } ``` -2. Include the DID document as a `did_doc` field in the authorization response message [https://iden3-communication.io/authorization/1.0/response/](https://iden3-communication.io/authorization/1.0/response/) +4. Include the DID document as a `did_doc` field in the authorization response message [https://iden3-communication.io/authorization/1.0/response/](https://iden3-communication.io/authorization/1.0/response/) 3. Notification message format that is expected to be sent to mobile. URL field is a valid URL to fetch a message. Fetch request must be HTTP GET request with no authorization required. The message is available for 24 hours on Push gateway or deleted after the fetch request. ```json From fd8973ae25ed67f774086de2beb716821a307bec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Gomes?= <39063808+cerberushades@users.noreply.github.com> Date: Mon, 9 Oct 2023 13:19:30 -0300 Subject: [PATCH 5/5] Update docs/wallet/push-notification.md Co-authored-by: vmidyllic <74898029+vmidyllic@users.noreply.github.com> --- docs/wallet/push-notification.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/wallet/push-notification.md b/docs/wallet/push-notification.md index 8e8ad4f5..ed727667 100644 --- a/docs/wallet/push-notification.md +++ b/docs/wallet/push-notification.md @@ -95,7 +95,7 @@ An encryption key must be used from the notification service. ``` 4. Include the DID document as a `did_doc` field in the authorization response message [https://iden3-communication.io/authorization/1.0/response/](https://iden3-communication.io/authorization/1.0/response/) -3. Notification message format that is expected to be sent to mobile. URL field is a valid URL to fetch a message. Fetch request must be HTTP GET request with no authorization required. The message is available for 24 hours on Push gateway or deleted after the fetch request. +Notification message format that is expected to be sent to mobile. URL field is a valid URL to fetch a message. Fetch request must be HTTP GET request with no authorization required. The message is available for 24 hours on Push gateway or deleted after the fetch request. ```json {