Confirmed users
20
edits
(General updating/ restructuring - in progress.) |
(More general updating/ restructuring.) |
||
Line 1: | Line 1: | ||
== Mozilla Open Badge Infrastructure (OBI) == | == Mozilla Open Badge Infrastructure (OBI) == | ||
NOTE: | NOTE: For a general introduction to badge issuing with the Mozilla OBI, read on. For more technical documentation, please see our [https://github.com/mozilla/openbadges/blob/development/docs/apis/issuer_api.md github pages]. | ||
=== Background === | === Background === | ||
==== Why Are We Doing This? ==== | ==== Why Are We Doing This? ==== | ||
Learning happens everywhere. Yet it's often difficult to be recognized for skills and achievements that are gained outside of school. Mozilla's Open Badges project is working to solve that problem by making it easy for anyone anywhere to issue, earn, and display badges. The results: broad recognition of 21st century skills, unlocking of career and educational opportunities, and learners everywhere being able to level up in their lives and work. | Learning happens everywhere. Yet it's often difficult to be recognized for skills and achievements that are gained outside of school. Mozilla's Open Badges project is working to solve that problem by making it easy for anyone anywhere to issue, earn, and display badges. The results: broad recognition of 21st century skills and experiences, unlocking of career and educational opportunities, and learners everywhere being able to level up in their lives and work. | ||
==== Goals ==== | ==== Goals ==== | ||
Line 11: | Line 11: | ||
* Help badges expand beyond siloed environments to be broadly shareable; | * Help badges expand beyond siloed environments to be broadly shareable; | ||
* Truly support earners learning everywhere; | * Truly support earners learning everywhere; | ||
* Optimize the value of | * Optimize the value of these representations by allowing badges to be remixable and shareable with different audiences; | ||
* Develop a supporting infrastructure to standardize the process and support each earner; | * Develop a supporting infrastructure to standardize the process and support each earner; | ||
* Create an infrastructure that is open and as decentralized as possible to give earners control and support of the entire ecosystem; | * Create an infrastructure that is open and as decentralized as possible to give earners control and support of the entire ecosystem; | ||
Line 18: | Line 18: | ||
==== Description ==== | ==== Description ==== | ||
The Open Badges framework is designed to | The Open Badges framework is designed to make badging flexible enough to represent the full range of learning and experience in online and offline life. This requires support for multiple, potentially significantly varied, badge issuers. Empowering earners to use their badges as legitimate credentials also requires support for sharing of badges across many display sites. | ||
Earners can share badges across such varied online environments as personal blogs and social networking channels, tying a variety of achievements to a single identity. It is critical for the infrastructure to be open, to give earners control over how they represent their own learning and experiences, to allow anyone to issue badges, and for each earner to be able to carry their badges with them throughout their online life. | |||
The participants in a badging system are characterized using a few broad groups: | |||
* Issuers - they create badges, make them available to earners and award them. | |||
* Earners - they apply for badges and decide where to display them. | |||
* Displayers - they display badges earned by particular earners (this also involves verifying badges). | |||
You will see these roles described throughout the material you read on Open Badges. This page is aimed at providing an overview of badging for ''issuers'', with an introduction to the technical aspects of issuing. | |||
Last but not least, although not involved directly in badging systems, let's not forget this group of people: | |||
* Consumers - they include anyone looking at a badge (or badges) earned | |||
** examples include potential employers, college admin and peers. | |||
=== Tech Specs === | === Tech Specs === | ||
Line 29: | Line 42: | ||
[[Image:Tech-diagram-v3 updated.png|700px|Open Badges -- Tech-diagram-v3 updated.png]]'''<br>''' | [[Image:Tech-diagram-v3 updated.png|700px|Open Badges -- Tech-diagram-v3 updated.png]]'''<br>''' | ||
Here's an overview of how badging works: | |||
* An issuer makes a badge available to their community of earners on their website. When awarded the badge, an earner sends it to their Backpack. | * An issuer makes a badge available to their community of earners on their website. When awarded the badge, an earner sends it to their Backpack. | ||
** The badge becomes portable through the [https://github.com/mozilla/openbadges/wiki/Issuer-API Issuer API] script, presenting the earner with a modal dialog that requests their consent to add the badge to their Backpack. | ** The badge becomes portable through the [https://github.com/mozilla/openbadges/wiki/Issuer-API Issuer API] script, presenting the earner with a modal dialog that requests their consent to add the badge to their Backpack. | ||
Line 58: | Line 72: | ||
'''Issuer''' | '''Issuer''' | ||
Organization or individual who issues Open Badges to their | Organization or individual who issues Open Badges to their community. The issuer is responsible for defining badges, making them available to earners and handling applications for them. | ||
* Badge issuing can involve participants with various specific roles, such as application assessors, badge creators and administrators. | * Badge issuing can involve participants with various specific roles, such as application assessors, badge creators and administrators. | ||
Line 74: | Line 88: | ||
'''[https://github.com/mozilla/openbadges-specification/blob/master/Assertion/latest.md Assertion Specification]''' | '''[https://github.com/mozilla/openbadges-specification/blob/master/Assertion/latest.md Assertion Specification]''' | ||
Badge metadata is represented as an [https://wiki.mozilla.org/Badges/Onboarding-Issuer# | Badge metadata is represented as an [https://wiki.mozilla.org/Badges/Onboarding-Issuer#Metadata assertion]. The assertion specification defines the information within a badge. An assertion includes multiple items of data, such as: badge name and description, issuer, date, criteria URL, evidence URL and badge image URL. The assertion should carry all the information needed to process a badge. This ensures that badges can be fully understood and verified no matter where they are shared. | ||
'''[https://github.com/mozilla/openbadges/wiki/Badge-Baking Badge Baking]''' | '''[https://github.com/mozilla/openbadges/wiki/Badge-Baking Badge Baking]''' | ||
A badge is an image combined with assertion data - badge baking embeds | A badge is an image combined with assertion data - badge baking embeds assertion data into an image to produce a portable badge. | ||
'''[https://github.com/mozilla/openbadges/wiki/Issuer-API Issuer API]''' | '''[https://github.com/mozilla/openbadges/wiki/Issuer-API Issuer API]''' | ||
Line 88: | Line 102: | ||
The Displayer API provides specifications for displaying badges beyond the Backpack. | The Displayer API provides specifications for displaying badges beyond the Backpack. | ||
'''[https:// | '''[https://wiki.mozilla.org/Badges/Onboarding-Issuer#Verification Verification] | ||
Displayers are responsible for verifying badges, i.e. checking that a badge is valid and was issued to the person claiming it. | |||
'''[[Badges/badgekit|BadgeKit]]''' | '''[[Badges/badgekit|BadgeKit]]''' | ||
Line 106: | Line 120: | ||
=== Background === | === Background === | ||
* Issuers determine the badging approach that will work best for their communities. | * Issuers determine the badging approach that will work best for their communities. | ||
* Touchpoints with the OBI occur through | * Touchpoints with the OBI occur through interfaces, including sending badges to Backpacks and optionally using BadgeKit. | ||
* Issuers do not need to register with the OBI - they simply utilize the JavaScript APIs. | * Issuers do not need to register with the OBI - they simply utilize the JavaScript APIs. | ||
Line 115: | Line 129: | ||
** Email addresses for earners (and the ability to email them). | ** Email addresses for earners (and the ability to email them). | ||
** Badges structured in the format that the assertion expects - when using BadgeKit this structuring is automated. | ** Badges structured in the format that the assertion expects - when using BadgeKit this structuring is automated. | ||
** 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 | ** 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 to and honor that request.'' | ||
* For verification: | * For verification: | ||
** For Hosted Assertions - issuers must maintain a server with the Badge Assertion information (at the unique badge URL) to verify each badge. | ** For Hosted Assertions - issuers must maintain a server with the Badge Assertion information (at the unique badge URL) to verify each badge. | ||
Line 125: | Line 139: | ||
=== Badge Creation Flow === | === Badge Creation Flow === | ||
Issuers need to: | |||
# Have an email address for the earner. | # Have an email address for the earner. | ||
# Create and host an | # 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.'' | ''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 Mozilla Backpack (or federated backpacks). There's no need to bake the badges independently as the API takes care of this.'' | ||
'''''The badge creation flow varies significantly for issuers using [[Badges/badgekit|BadgeKit]]. Issuer admins can design and define the data for a badge within the BadgeKit Web app, with BadgeKit handling | '''''The badge creation flow varies significantly for issuers using [[Badges/badgekit|BadgeKit]]. Issuer admins can design and define the data for a badge within the BadgeKit Web app, with BadgeKit handling metadata structuring. Issuers can then present available badges to their earners using the BadgeKit API.''''' | ||
=== Open Badges related Widgets created by the community === | === Open Badges related Widgets created by the community === | ||
Line 142: | Line 157: | ||
=== BadgeKit === | === BadgeKit === | ||
[https://wiki.mozilla.org/Badges/badgekit BadgeKit] builds on a range of tools which have been under continual development for some time through projects such as Chicago Summer of Learning. These tools include [https://github.com/mozilla/openbadger/blob/v2.0/docs/api.md Open Badger] and [https://github.com/mozilla/aestimia Aestimia]. | [https://wiki.mozilla.org/Badges/badgekit BadgeKit] builds on a range of tools which have been under continual development for some time, through projects such as Chicago Summer of Learning. These tools include [https://github.com/mozilla/openbadger/blob/v2.0/docs/api.md Open Badger] and [https://github.com/mozilla/aestimia Aestimia]. | ||
== Backpack == | == Backpack == | ||
Line 149: | Line 164: | ||
* The Backpack is open source and federated. Earners or issuers can take the [https://github.com/mozilla/openbadges code] and fork it. | * 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 (the "Mozilla Backpack") which holds all of the badge | * 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. | ||
== | == Metadata == | ||
Badge metadata is defined as an assertion, which contains multiple required and optional fields. The structure has evolved over time - see the [https://github.com/mozilla/openbadges-specification/blob/master/Assertion/latest.md assertion specification] for complete details. | Badge metadata is defined as an assertion, which contains multiple required and optional fields. The structure has evolved over time - see the [https://github.com/mozilla/openbadges-specification/blob/master/Assertion/latest.md assertion specification] for complete details. | ||
Issuers can put a reasonable amount of extra material into | Issuers can put a reasonable amount of extra material into a badge, but that material must be static - once the badge is issued, any change to the 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. | ||
== Badge Images and Baking == | == Badge Images and Baking == | ||
* | * A baked badge is a JSON blob of metadata embedded in a PNG file. | ||
* This allows the badge to be more easily portable - | * This allows the badge to be more easily portable - a collection of information that can be emailed, carrying its details with it. | ||
* Ultimately, this is important for decentralization of the system and will allow earners to have more control over where their badges live. | * Ultimately, this is important for decentralization of the system and will allow earners to have more control over where their badges live. | ||
=== Baking Service === | === Baking Service === | ||
* To bake a badge, you must host a badge | * To bake a badge, you must host a badge [https://github.com/mozilla/openbadges-specification/blob/master/Assertion/latest.md assertion] on your site. | ||
** The system is designed to: | ** The system is designed to: | ||
*** avoid SPAMing the earner with unwanted badges, and | *** avoid SPAMing the earner with unwanted badges, and | ||
Line 172: | Line 186: | ||
* Mozilla provides the "tools" for unpacking the PNG file through the OBI. | * Mozilla provides the "tools" for unpacking the PNG file through the OBI. | ||
* 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 in the Backpack where each earner can view, manage, and organize their badges (and see all the metadata behind each badge). | ||
* PNG files | * PNG files are unpacked so that displayers just have the raw data to work with on their end. | ||
''If you are building a new system, we strongly recommend using the JavaScript Issuer API or BadgeKit for awarding badges. The tools and APIs take care of the badge baking.'' | ''If you are building a new system, we strongly recommend using the JavaScript Issuer API or BadgeKit for awarding badges. The tools and APIs take care of the badge baking.'' | ||
Line 180: | Line 194: | ||
* 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. They should have dimensions not smaller that 90 x 90. | ||
* Image is provided as a URL to the image on the issuer server | * Image is provided as a URL to the image on the issuer server, stored within the metadata. | ||
* Mozilla will cache the image in at least two sizes. | * Mozilla will cache the image in at least two sizes. | ||
* 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. | * 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. | ||
Line 186: | Line 200: | ||
== Verification == | == Verification == | ||
Badge verification involves checking that a badge was issued to the person displaying it, using their email address. Verification affects both issuers and displayers. | |||
* 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 is essential to allow earners to prove the authenticity and validity of their badges. Badges can also have expiry dates, allowing | * This is essential to allow earners to prove the authenticity and validity of their badges. Badges can also have expiry dates, allowing organizations to issue badges for skills which are only valid for a set period of time. | ||
* 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, by communicating 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). | * The issuer must be online to verify badges. (We are exploring a cache to cover verification for a set amount of time). | ||
* | * Verification is typically carried out by displayers, who should not display a badge that cannot be verified. | ||
=== Verification Method === | === Verification Method === | ||
The OBI currently supports verification of badges through hosted and signed assertions. The assertion data for a badge contains verification information. For hosted assertions, this includes a URL field representing the assertion hosted on the issuer's server. For signed assertions, it includes a link to the issuer's public key. Displayers can utilize this data to verify badge earners. | |||
* | |||
* | The verification process is as follows: | ||
* | '''''For hosted assertions''''': | ||
# Displayer carries out a GET request on the verification URL from the assertion. | |||
#* If the response is not 200 OK or if the data at the URL is not structurally valid, the badge is treated as invalid. | |||
# Displayer analyses content of data at assertion verification URL, which includes recipient email address. | |||
#* Verification can now be achieved by comparing the salted hash value for the recipient (according to the verification data) to the salted hash for the email of the person claiming the badge. | |||
# The displayer can optionally check further information in the verification data, including an expiry date if there is one. | |||
'''''For signed assertions''''': | |||
# Displayer unpacks JWS object specified in the assertion verification fields. | |||
#* If the data fails to parse as JSON data, verification fails. | |||
# Displayer extracts the verify.url property from the JSON, carries out a GET request on it and stores the public key. | |||
#* If the HTTP status is not 200 OK, verification fails. | |||
# Displayer uses the public key to perform JWS verification on the JWS object - if this fails, the badge is considered invalid. | |||
# Displayer retrieves the revocation list and checks that the badge ID is not included. | |||
For more about assertions and verification, see the [https://github.com/mozilla/openbadges-specification/blob/master/Assertion/latest.md Specification]. | |||
''Note: for baked badges, verification also involves extracting the assertion URL from the badge image - see the [https://github.com/mozilla/openbadges-verifier Verifier] for more on this.'' | |||
=== Functional Flow === | === Functional Flow === | ||
# Badge ( | # Badge (including 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) | ||
# 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 displayer displays the badge. If not, displayer should reject the badge. | # If values match, badge is verified and displayer displays the badge. If not, displayer should reject the badge. | ||
== Displayers == | == Displayers == | ||
* Each earner | Displayers are key to the value of Open Badges for earners. The OBI is designed to support display of badges acquired in various different types of context, letting earners paint a more detailed, complete picture of their skills and experiences. | ||
* 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 controls where their 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]. | * 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; those badges | * Earners can also make badges public; those badges are discoverable by displayers if they have the earner's email address. | ||
* If a site has an earner's email address, they | * If a site has an earner's email address, they can query that person's Backpack for all of that earner's public badges. The response is a JSON representation of the badges. | ||
== Identity == | == Identity == | ||
* Identity is a critical component because we need to recognize earners as they | * Identity is a critical component because we need to recognize earners as they collect badges from different issuers. | ||
* It's important to us that identity be open and decentralized. | * It's important to us that identity be open and decentralized. | ||
* We are utilizing verified email as a form of identity through the Mozilla product Persona. | * We are utilizing verified email as a form of identity through the Mozilla product Persona. |