{"id":15763013,"url":"https://github.com/junzhengca/identity-atheneum","last_synced_at":"2025-06-11T10:09:39.289Z","repository":{"id":94908850,"uuid":"151969949","full_name":"junzhengca/Identity-Atheneum","owner":"junzhengca","description":"Identity federation and data storage platform for education tools. Powered by MongoDB, Redis and Node.js. Connect using simple REST API.","archived":false,"fork":false,"pushed_at":"2019-02-14T13:41:18.000Z","size":1946,"stargazers_count":4,"open_issues_count":4,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-08T14:34:15.519Z","etag":null,"topics":["authentication","data-storage","node-js","saml"],"latest_commit_sha":null,"homepage":"https://tracademic.utsc.utoronto.ca/login","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/junzhengca.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-10-07T18:00:36.000Z","updated_at":"2020-08-07T07:34:58.000Z","dependencies_parsed_at":"2023-03-21T23:01:49.485Z","dependency_job_id":null,"html_url":"https://github.com/junzhengca/Identity-Atheneum","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junzhengca%2FIdentity-Atheneum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junzhengca%2FIdentity-Atheneum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junzhengca%2FIdentity-Atheneum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/junzhengca%2FIdentity-Atheneum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/junzhengca","download_url":"https://codeload.github.com/junzhengca/Identity-Atheneum/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243478390,"owners_count":20297246,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["authentication","data-storage","node-js","saml"],"created_at":"2024-10-04T11:40:21.883Z","updated_at":"2025-03-13T20:32:07.106Z","avatar_url":"https://github.com/junzhengca.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Identity Atheneum\n\n[![Build Status](https://travis-ci.org/junthehacker/Identity-Atheneum.svg?branch=master)](https://travis-ci.org/junthehacker/Identity-Atheneum)\n[![Coverage Status](https://coveralls.io/repos/github/junthehacker/Identity-Atheneum/badge.svg?branch=master)](https://coveralls.io/github/junthehacker/Identity-Atheneum?branch=master)\n[![Slack](https://identity-atheneum-slackin.herokuapp.com/badge.svg)](https://identity-atheneum-slackin.herokuapp.com)\n\n\nEasy to use data storage and authorization service for developers.\n\n## Installation\n\n### System Requirements\n\n* UNIX based operating system (Linux/macOS)\n* Redis 2/3/4 (cannot be password protected)\n* MongoDB 3.6+ (cannot be passsword protected)\n* Node.js 8.x\n\n### Install Dependencies\n\nFirst clone the repository and install all dependencies.\n\n```bash\n# clone the repository\ngit clone https://github.com/junthehacker/Identity-Atheneum.git\n# cd into the repo\ncd Identity-Atheneum\n# install node dependencies\nnpm install\n```\n\n### Build\n\nWe must run a build script before we can actually run the service.\n\n```\nnpm run flow:build\n```\n\nAbove command will build everything within `/src` and output into `/lib`.\n\n### Configuration\n\nBefore running the service, you must have a valid configuration file, located at `/config.yml`.\n\n* port: Port you wish to run the service on.\n* host_root: The root URL of the service, for example: https://sample.com (do not include trailing `/`).\n* app_secret: A random string, used to encrypt sessions.\n* redis:\n    * host: Redis server host\n    * port: Redis server port\n* mongo:\n    * url: MongoDB connection url, for example mongodb://localhost/27017/ia (make sure you include the db name)\n* master_key: A random password, used for administrative access.\n* identity_providers: A list of IdP configurations, please see [IdP Configurations](#idp-configurations) for more detail.\n\n### Run\n\nTo run the service, use the following command\n\n```\nnode ./lib\n```\n\nYou should see something similar to the following\n\n```\nLocal IdP local_provider initialized.\n/idps/local_provider mounted.\nSAML IdP testshib initialized.\n/idps/testshib mounted.\n\n========================================\n ___      ________         \n|\\  \\    |\\   __  \\        \n\\ \\  \\   \\ \\  \\|\\  \\       \n \\ \\  \\   \\ \\   __  \\      \n  \\ \\  \\ __\\ \\  \\ \\  \\ ___    Build 1\n   \\ \\__\\\\__\\ \\__\\ \\__\\\\__\\   1.0\n    \\|__\\|__|\\|__|\\|__\\|__|   Dandelion\n```\n\nCongratulations! The service is running.\n\n## IdP Configurations\n\nYou must have a list of IdPs to make the service useful, there are a few to choose from.\n\n### Local\n\nA local identity provider, it stores username and password within MongoDB.\n\nYou can only have one local identity provider.\n\n#### Sample Configuration\n\n```yaml\nidentity_providers:\n  # ...\n  - type: local\n    name: local_provider\n    display_name: Local Identity Provider\n```\n\n* type: Should always be `local`\n* name: Unique name for IdP, this is used to generate login URLs.\n* display_name: Name shown on main login page.\n\n### SAML 2.0\n\nSAML 2.0 IdP, if you are using Shibboleth, use this one.\n\nTo configure SAML IdP, you must have a key/certificate pair, you can use the following command to generate a pair:\n\n```\nopenssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out certificate.crt\n```\n\n#### Sample Configuration\n\n```yaml\nidentity_providers:\n  # ...\n  - type: saml\n    name: testshib\n    display_name: TestShib\n    config:\n      callback_url: http://localhost:3000/idps/testshib/login\n      entry_point: https://idp.testshib.org/idp/profile/SAML2/Redirect/SSO\n      identifier_format: urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified\n      issuer: my_issuer\n      public_cert: keys/certificate.crt\n      private_key: keys/mykey.key\n      signature_algo: sha256\n```\n\n* type: Should always be `saml`\n* name: Unique name for IdP, this is used to generate login URLs.\n* display_name: Name shown on main login page.\n* config:\n    * callback_url: This should always be `\u003chost_root\u003e/idps/\u003cname\u003e/login`\n    * entry_point: SAML 2.0 entry URL\n    * identifier_format: User identifier format, make sure your IdP support the format you chose. If not sure, use `unspecified`.\n    * issuer: Just a name, you can use anything you like\n    * public_cert: Path to your public certificate\n    * private_key: Path to your private key\n    * signature_algo: What algorithm to use when signing requests.\n    \n## SAML MetaData\n\nIt is useful to have a xml metadata file when registering with your IdP. To obtain this file, first make sure you have everything configured, then run the service and go to following URL.\n\n```\n\u003chost_root\u003e/idps/\u003cname\u003e/metadata\n```\n\n## CLI\n\nI.A. comes with a command line tool. You can find it under `/cli` directory.\n\nIt is a Node.js app, you can run it by first `npm install`, then `node index.js`.\n\n## Integration\n\nI have a I.A. development instance setup on my personal server, the location is: `https://ia.junthehacker.com`\n\n### Register Your App\n\nBefore you start developing, you must register your application.\n\n#### Obtain a Developer Account\n\n* Please first register an SSOCircle (https://www.ssocircle.com/en/) account.\n* Login at https://ia.junthehacker.com/login.\n* Email me (me at jackzh dot com) with your username, I will add you as a developer.\n\n#### Login to Developer Dashboard\n\n* Login with your SSOCircle account at https://ia.junthehacker.com/login, if you are a developer, you should see a Developer Dashboard button.\n\n#### Create New Registration\n\n* Click Create New Registration to create a new app.\n* Give your app a name, can be anything.\n* Assertion Endpoint is the url we will send the bearer token to, for example https://myapp.com/ia/login.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjunzhengca%2Fidentity-atheneum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjunzhengca%2Fidentity-atheneum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjunzhengca%2Fidentity-atheneum/lists"}