Confirmed users
124
edits
No edit summary |
No edit summary |
||
Line 71: | Line 71: | ||
== B. Issuer == | == B. Issuer == | ||
An organization | An organization or individual who issues designs and issues badges into the ecosystem. The OBI is open and supports any independent issuer who conforms to the necessary badge and issuing specifications. | ||
=== I. BACKGROUND === | === I. BACKGROUND === | ||
* | * Issuers completely determine the content and criteria behind their badge systems. They know their communities best. | ||
* The touchpoint with the OBI occurs when earners send their badges to the designated Backpack. | |||
* Issuers do not need to register with the OBI; they simply send badges to earner's Backpacks utilizing the Issuer Javascript API. | |||
* The touchpoint with the OBI | |||
* Issuers do not need to register with the OBI | |||
=== II. REQUIREMENTS === | === II. REQUIREMENTS === | ||
* Issuers must have web server capable of serving requests to the general | * Issuers must have web server capable of serving requests to the general Internet. | ||
* Issuers must have hosting ability | * Issuers must have hosting ability. | ||
* Issuers must have ability to make a POST request from their server backend and read a JSON response. | * Issuers must have ability to make a POST request from their server backend and read a JSON response. | ||
* Issuers must have email addresses for | * Issuers must have email addresses for earners and must be able to email earners. | ||
* Issuers must have badges (or be able to convert their badges) into the format (metadata spec) that the Assertion expects. | * Issuers must have badges (or be able to convert their badges) into the format (metadata spec) that the Assertion expects. | ||
* Earners must be registered with | * Earners must be registered with the backpack implementation that the issuer is trying to send their badges to. In the future, the issuer will need to ask the earner which backpack they want to push badges their to and honor that request. | ||
* For verification: | * For verification: | ||
** If doing Hosted Assertions (currently available) | ** If doing Hosted Assertions (currently available). | ||
*** Issuers must maintain a server with the Badge Assertion information (at the unique badge URL) to verify each badge | *** Issuers must maintain a server with the Badge Assertion information (at the unique badge URL) to verify each badge. | ||
** If doing Signed Assertions | ** If doing Signed Assertions. | ||
*** Issuers must generate public/private key pair and maintain the hosted public key | *** Issuers must generate public/private key pair and maintain the hosted public key. | ||
*** Issuers must sign the badges themselves | *** Issuers must sign the badges themselves, sign the whole package, and push badges to earner backpacks through the Issuer Javascript API. | ||
=== III. BADGE CREATION FLOW === | === III. BADGE CREATION FLOW === | ||
# Have an email address for the | # Have an email address for the earner. | ||
# Create and host an Assertion on | # Create and host an Assertion on site. | ||
# Create and host the badge PNG; this is a single PNG for all badges, not a single physical PNG per issued badge. | # Create and host the badge PNG; this is a single PNG for all badges, not a single physical PNG per issued badge. | ||
# Integrate your site with the Backpack via the Issuer API | # Integrate your site with the Backpack via the Issuer API | ||
The Issuer API is a script that can be dropped into any badge issuer's website to provide a way for earners to add an issuer's badges to their Backpack or federated backpacks. There's no need to bake the badges independently as the API takes care of this. | |||
=== IV. OPEN BADGES Related Widgets created by the community === | === IV. OPEN BADGES Related Widgets created by the community === | ||
Line 110: | Line 108: | ||
=== V. Open Badger === | === V. Open Badger === | ||
OpenBadger | OpenBadger will be a lightweight OBI compliant badge issuing platform. It will soon make creating and issuing badges easy for non-technical users. | ||
We've done some [https://github.com/mozilla/OpenBadger/wiki/Speculation speculation] but more to come on the [https://github.com/mozilla/openbadger Open Badger github]. | We've done some [https://github.com/mozilla/OpenBadger/wiki/Speculation speculation] but more to come on the [https://github.com/mozilla/openbadger Open Badger github]. | ||
== C. Badge == | == C. Badge == | ||
* Representation - Assertion URL representing chunks of JSON data embedded into a PNG file. | |||
* Representation - Assertion | * [https://github.com/mozilla/openbadges/wiki/Assertions Badge Assertion aka Badge Manifest] - Earner identity information (<algorithm>$<hash(email + salt)>) plus badge information (JSON metadata). | ||
* [https://github.com/mozilla/openbadges/wiki/Assertions Badge Assertion aka Badge Manifest] - Earner identity information (<algorithm>$<hash(email + salt)>) plus badge information (JSON metadata) | * Verified Badge - Badges that have an Assertion URL. The OBI currently supports verification of badges through Hosted Assertions. When the issuer sends a badge, metadata is pushed to a unique and persistent URL (the assertion URL). The issuer maintains badge Assertion and displayers can ping the assertion URL to confirm verification. | ||
* Verified Badge - Badges that have an | * Endorsed Badge - Badges that have been signed by a third party or endorser. The Backpack verifies the signature against the signer’s public key, and if confirmed, accepts the badge as an endorsed badge. The endorsement information is represented with the badge as a layer of trust on the badge’s validity. | ||
** n.b. On [https://wiki.mozilla.org/Badges/roadmap development roadmap] for 2013. | |||
* Endorsed Badge - Badges that have been signed by a third party | |||
** n.b. On [https://wiki.mozilla.org/Badges/roadmap development roadmap] for | |||
== D. Backpack == | == D. Backpack == | ||
Backpack is an authorized data storage | The Mozilla Backpack is an authorized data storage space and management interface for earners of Open Badges. Each earner can access their own Backpack that holds all of their badges and gives them an interface to manage and share their badges. | ||
* The Backpack | * The Backpack is open source and federated. Earners or issuers can take the [https://github.com/mozilla/openbadges code] and fork it. | ||
* Earners may decide to create and host their own Backpack so that they have complete control over their badges. | * Earners may decide to create and host their own Backpack so that they have complete control over their badges. | ||
* Mozilla has built a reference or default Backpack which | * Mozilla has built a reference or default Backpack (the "Mozilla Backpack") which holds all of the badge Assertions (hashed user email + badge data) for each earner. | ||
== E. Metadata Spec == | == E. Metadata Spec == | ||
=== I. OVERVIEW === | === I. OVERVIEW === | ||
* A badge is an assertion | * A badge is an assertion URL representing chunks of JSON data embedded into a PNG file. | ||
* The metadata should carry all the information needed to understand a badge. This ensures that badges can be fully understood and verified no matter where they are shared | * The metadata should carry all the information needed to understand a badge. This ensures that badges can be fully understood and verified no matter where they are shared. | ||
* This is the data presented in the Assertion URL on the | * This is the data presented in the Assertion URL on the issuer's server. | ||
=== II. FIELDS === | === II. FIELDS === | ||
Line 144: | Line 140: | ||
*** version: The version of the badge | *** version: The version of the badge | ||
*** name: Human-readable name of the badge being issued. Maximum of 128 characters. | *** name: Human-readable name of the badge being issued. Maximum of 128 characters. | ||
*** image: URL for image representing the badge. Should be a square and in PNG format. Maximum size | *** image: URL for image representing the badge. Should be a square and in PNG format. Maximum size is 256kb. | ||
*** description: Description of the badge being issued. Maximum of 128 characters. | *** description: Description of the badge being issued. Maximum of 128 characters. | ||
*** criteria: URL describing the badge and criteria for earning the badge ( | *** criteria: URL describing the badge and criteria for earning the badge (not the specific instance of the badge). | ||
*** issuer: Information about the | *** issuer: Information about the issuer: | ||
**** origin: Origin of the | **** origin: Origin of the issuer. This is the <protocol>://<host>:<port>. Must match the origin of the Hosted Assertion (and in the future, the origin of the public key). | ||
**** name : Human-readable name of the issuing agent. | **** name : Human-readable name of the issuing agent. | ||
* Optional | * Optional | ||
** evidence: Earner-specific URL with information about this specific badge instance. Should contain information about how the | ** evidence: Earner-specific URL with information about this specific badge instance. Should contain information about how the individual earner earned the badge. | ||
** expires: Date when the badge expires. If omitted, the badge never expires. | ** expires: Date when the badge expires. If omitted, the badge never expires. | ||
*** The badge is not removed from the | *** standard: Information about a governing institution or standard that a badge is related to. | ||
** issued_on: Date when badge was issued. If omitted, the issue date will be set to the date the badge was pushed to the Backpack. Must be formatted "YYYY-MM-DD" or a unix timestamp | *** The badge is not removed from the earner’s Backpack after the expiration date; there will be some visual/technical indicator that the badge is expired and needs to be re-upped. Must be formatted "YYYY-MM-DD" or a unix timestamp. | ||
** issued_on: Date when badge was issued. If omitted, the issue date will be set to the date the badge was pushed to the Backpack. Must be formatted "YYYY-MM-DD" or a unix timestamp. | |||
** issuer: Information about the Issuer: | ** issuer: Information about the Issuer: | ||
*** org: (OPTIONAL) Organization for which the badge is being issued. An example is if a scout badge is being issued, the "name" of the Issuer could be "Boy Scouts" and the "org" could be "Troop #218" | *** org: (OPTIONAL) Organization for which the badge is being issued. An example is if a scout badge is being issued, the "name" of the Issuer could be "Boy Scouts" and the "org" could be "Troop #218". | ||
*** contact: (OPTIONAL) A human-monitored email address associated with the Issuer. | *** contact: (OPTIONAL) A human-monitored email address associated with the Issuer. | ||
Issuers can put a reasonable amount of extra material into the badge, but that material must be static -- once the badge is issued, any change to that information must not change. This is to prevent someone from issuing one badge, then sneakily changing it later to another badge unbeknownst to the earner. | |||
== F. PNG Files / Badge Baking Service == | == F. PNG Files / Badge Baking Service == | ||
=== I. BACKGROUND === | === I. BACKGROUND === | ||
* Each badge is a JSON blob of metadata embedded in a PNG file | * Each badge is a JSON blob of metadata embedded in a PNG file. | ||
* This allows the badge to be more easily portable - an actual | * This allows the badge to be more easily portable - an actual collection of information that can be emailed around and portable while still carrying its details with it. | ||
* Ultimately, this is important for decentralization of the system | * Ultimately, this is important for decentralization of the system and will allow earners to have more control over where their badges live. | ||
=== II. BETA: BAKING SERVICE === | === II. BETA: BAKING SERVICE === | ||
* REQUIREMENTS: To bake a badge, you must be hosting a | * REQUIREMENTS: To bake a badge, you must be hosting a badge Assertion on your site. | ||
** See the Assertions page for details: | ** See the Assertions page for details: http://bit.ly/NewOpenBadgesAssertion | ||
* Issuers will still send the | * Issuers will still send the badge Assertion to Mozilla, but instead of sending it directly to the Backpack, they will now send it to the Mozilla Baking Service. Then Mozilla will package it into a PNG and deliver back to the issuer who can then send to the earner. | ||
** The purpose of this is: | ** The purpose of this is: | ||
*** A) to avoid SPAMing the Earner with unwanted badges | *** A) to avoid SPAMing the Earner with unwanted badges, and | ||
*** B) to give the Earners ultimate control over where the badges go. | *** B) to give the Earners ultimate control over where the badges go. | ||
** n.b. If you are building a new system, we strongly recommend using the Javascript Issuer API for awarding badges. The API takes care of the badge baking for the Issuer. | ** n.b. If you are building a new system, we strongly recommend using the Javascript Issuer API for awarding badges. The API takes care of the badge baking for the Issuer. | ||
* Mozilla | * Mozilla provides the "tools" for unpacking the PNG file through the OBI. | ||
* PNG files will be unpacked in the Backpack where each | * PNG files will be unpacked in the Backpack where each earner can view, manage, and organize their badges (and see all the metadata behind each badge). | ||
* PNG files will be unpacked for the Displayer API so that Displayers will just have the raw data to work with on their end. | * PNG files will be unpacked for the Displayer API so that Displayers will just have the raw data to work with on their end. | ||
=== III. BADGE IMAGE STANDARDS === | === III. BADGE IMAGE STANDARDS === | ||
* Image must be a PNG | * Image must be a PNG. | ||
* Images should be square and not exceed 256kb. They should have dimensions not smaller that 90 x 90. | |||
* Images should be square and not exceed 256kb | * Image is provided as a URL to the image on the issuer server in the metadata. | ||
* Mozilla will cache the image in at least two sizes. | |||
* Image is provided as a URL to the image on the | * When a badge is displayed, it will be loaded from the Mozilla cache to avoid extra burden on the issuer servers. This also helps if the issuer is not available or the link is broken. | ||
* Mozilla will cache the image in at least | |||
* When a badge is displayed, it will be loaded from the Mozilla cache to avoid extra burden on the | |||
== G. Verification == | == G. Verification == | ||
Line 194: | Line 189: | ||
=== I. OVERVIEW === | === I. OVERVIEW === | ||
* To avoid gaming and duplication, the OBI is built to support badge verification. | * To avoid gaming and duplication, the OBI is built to support badge verification. | ||
* This | * This helps handle the questions of "Did this Issuer issue this badge to this earner on this date? Is this badge still valid or has it expired?" | ||
* The OBI provides the channel for this verification to happen through the Backpack | * The OBI provides the channel for this verification to happen through the Backpack but must communicate with the Issuer. | ||
* | * The issuer must be online to verify badges. (We are exploring a cache to cover verification for a set amount of time). | ||
* Most verification will be done by | * Most verification will be done by displayers. Displayers should not display a badge that cannot be verified. | ||
=== II. VERIFICATION METHOD === | === II. VERIFICATION METHOD === | ||
* OBI currently supports verification of badges through Hosted Assertions | * The OBI currently supports verification of badges through Hosted Assertions. When an issuer sends a badge using the OBI, metadata is pushed to a unique and persistent URL (the Assertion URL). The issuer maintains the badge Assertion and displayers can ping the assertion URL to verify the badge. | ||
** | ** A displayer puts the earner’s email address through a salted hash function and sees if it matches with the hash value indicated for the recipient in the badge metadata. If values match, the badge belongs to the earner and can be claimed. | ||
** | ** There is a drawback of overhead for the issuer to maintain unique and persistent URLs for each badge. | ||
* | * With the V1.0 release we support Signed Assertions, allowing for signing of a badge assertion with a private key and hosting a public key at a public URL. | ||
** | ** This has the benefit of creating less overhead for the issuer who just need to host the public key. | ||
* | * Looking forward, we will try to support DNSSEC for public key discovery. | ||
* Unverified Badge handling | * Unverified Badge handling | ||
** If badge is passed through by an | ** If a badge is passed through by an issuer and the signature is invalid, it is rejected. | ||
** If badge is verified initially but | ** If a badge is verified initially but it becomes unverified in the future, the earner is notified. | ||
=== III. FUNCTIONAL FLOW === | === III. FUNCTIONAL FLOW === | ||
# Badge (within it, its assertion) exists in the Backpack | # Badge (within it, its assertion) exists in the Backpack. | ||
# User attempts to display badge via a display site widget | # User attempts to display badge via a display site widget. | ||
# Display site takes the earner’s email and puts it through a salted hash function. | # Display site takes the earner’s email and puts it through a salted hash function. | ||
## eg. hash (‘hipjoe@example.com’ + salt) | ## eg. hash (‘hipjoe@example.com’ + salt) | ||
# Display site compares the resulting value with the value indicated for the recipient in the badge metadata. | # Display site compares the resulting value with the value indicated for the recipient in the badge metadata. | ||
# If values match, badge is verified and | # If values match, badge is verified and displayer displays the badge. If not, displayer should reject the badge. | ||
== H. Displayers == | == H. Displayers == | ||
* Display of badges is where a significant part of the value lies | * Display of badges is where a significant part of the value of this approach lies. Badges are not siloed or limited to one site but can be combined with badges from multiple issuers and then shared for different audiences and purposes. | ||
* | * Each earner will control where badges are displayed through the Backpack. | ||
* | * Each earner can create collections of badges and share with displayers that have connected to the [https://github.com/mozilla/openbadges/wiki/Displayer-API Displayer API]. | ||
* Earners can also make badges public | * Earners can also make badges public; those badges would be discoverable by displayers if they had the earner’s email address. | ||
* | * If a site has an earner's email address, they will be able to query that person's Backpack for all of that earner's public badges. They will get back JSON representation of the badges. | ||
== I. Identity == | == I. Identity == | ||
=== I. OVERVIEW === | === I. OVERVIEW === | ||
* Identity is a critical | * Identity is a critical component because we need to recognize earners as they earn badges from different issuers. | ||
* | * It's important to us that identity be open and decentralized. | ||
* We are utilizing verified email as identity through | * We are utilizing verified email as a form of identity through the Mozilla product Persona. | ||
** Additional info: https://browserid.org/, https://wiki.mozilla.org/Identity | ** Additional info: https://browserid.org/, https://wiki.mozilla.org/Identity | ||
* Many sites already use email addresses for logins, even those that don't generally collect them. | |||
* We don't need to retain any profile or personal information about the earner; all we need is their email address. | |||
* Many sites already use email for | |||
* We don't need to retain any profile or personal information about the | |||
=== II. FUNCTIONAL FLOW FOR VERIFYING IDENTITY IN BACKPACK === | === II. FUNCTIONAL FLOW FOR VERIFYING IDENTITY IN BACKPACK === | ||
# User validates identity to Mozilla's Verified Email | # User validates identity to Mozilla's Verified Email. | ||
# User creates an account with Mozilla (same as sync account) | # User creates an account with Mozilla (same as sync account). | ||
# User asserts which email addresses he or she owns. | # User asserts which email addresses he or she owns. | ||
# User does an SMTP challenge (system emails user a token link they must click) to prove ownership | # User does an SMTP challenge (system emails user a token link they must click) to prove ownership. |