Hello! This documentation has been deprecated - you can find the updated documentation at https://gist.github.com/jen-k/73e5dae57526ecf73d8475e2f59a3f9a
Deprecated documentation
Students at your school can quickly claim their GitHub Education benefits by visiting a unique web address. By visiting that address, GitHub will verify the student's academic status with your school and instantly deliver their benefits to them.
Your school can create a unique web address for each student by including three things in it:
-
school_id
: Your school’s unique identifier, provided by GitHub. -
student_id
: The individual student’s unique identifier, defined by your school. -
signature
: A code used to authenticate the message, produced by your school using an algorithm (instructions below).
Used together, your school can deliver each student a unique web address that looks something like this:
The algorithm you’ll use to create each student’s signature requires the aforementioned school_id
and student_id
, as well as an additional GitHub-provided secret_key
.
The algorithm requires that each of these values be passed as strings -- not numerals.
Here, for example, is how you can then produce a student’s signature using Ruby:
signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), secret_key, school_id + student_id)
When a student receives their unique web address from your school, they can visit that address in any web browser. If they are already signed into GitHub on that browser, they’ll see a GitHub Education web page confirming that they’ve been verified.

If they’re not yet signed in, the student will simply be asked to sign in before seeing the confirmation web page.
@orboan it seems to me that Ruby is not a requirement. They simply showed an example using Ruby to illustrate which types of algorithms are required to sign the request. A quick google for openssl HMAC java yields this repo that shows examples in other languages.