Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions _data/vendors.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Approved commercial-support vendors for the Open Identity Platform.
#
# Source of truth: https://github.com/OpenIdentityPlatform/.github/wiki/Approved-Vendor-List
# Order is strict alphabetical. Listing here is NOT an endorsement and implies no ranking.
#
# `region` is the vendor's HEADQUARTERS location (a verifiable fact), used by the region
# filter and the timezone hint on /support. Most vendors serve clients worldwide.
#
# Emails are split into user/domain so the address is assembled in the browser (light
# anti-scraping); the visible "user [at] domain" text on the page is the no-JS fallback.
- name: "3A Systems LLC"
slug: "3a-systems"
country: "Russia"
region: "cis"
region_label: "CIS"
languages: "Russian, English"
website: "https://www.3a-systems.ru"
email_user: "sales"
email_domain: "3a-systems.ru"
- name: "Identity Fusion, Inc."
slug: "identity-fusion"
country: "United States / United Kingdom"
region: "americas"
region_label: "Americas"
languages: "English"
website: "https://www.identityfusion.com"
email_user: "info"
email_domain: "identityfusion.com"
- name: "Orchitech Solutions s.r.o."
slug: "orchitech"
country: "Czechia"
region: "europe"
region_label: "Europe"
languages: "Czech, English"
website: "https://orchi.tech"
email_user: "info"
email_domain: "orchitech.cz"
- name: "OSSTech Corporation"
slug: "osstech"
country: "Japan"
region: "apac"
region_label: "Asia-Pacific"
languages: "Japanese, English"
website: "https://www.osstech.co.jp"
email_user: "info"
email_domain: "osstech.co.jp"
24 changes: 24 additions & 0 deletions _includes/analytics-events.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<!-- GA4 conversion events. Delegated listener: any element with data-ga-event fires
that GA4 event, passing its remaining data-ga-* attributes as parameters
(data-ga-vendor -> vendor, data-ga-location -> location, ...). gtag is defined
in header.html with Consent Mode v2; when analytics consent is denied gtag drops
the hit, so no extra gating is needed here. Runs in the capture phase so the event
is queued before same-page navigation unloads the document. -->
<script>
(function () {
document.addEventListener('click', function (e) {
var el = e.target.closest ? e.target.closest('[data-ga-event]') : null;
if (!el) return;
var name = el.getAttribute('data-ga-event');
if (!name || typeof gtag !== 'function') return;
var params = {};
for (var i = 0; i < el.attributes.length; i++) {
var attr = el.attributes[i];
if (attr.name.indexOf('data-ga-') === 0 && attr.name !== 'data-ga-event') {
params[attr.name.slice(8).replace(/-/g, '_')] = attr.value;
}
}
gtag('event', name, params);
}, true);
})();
</script>
43 changes: 39 additions & 4 deletions _includes/footer.html
Original file line number Diff line number Diff line change
@@ -1,12 +1,47 @@
<footer class="footer bg-primary text-white">
<div class="container">
<div class="row">
<div class="col-8">
<a class="text-white text-center align-middle" href="{{site.repo_url}}">&copy; {{site.title}}</a>
<div class="row footer-nav g-4 pb-2">
<div class="col-6 col-md-3">
<div class="footer-heading">Products</div>
<ul class="footer-list">
{% for product in site.data.products %}
<li><a href="{{ product.details_link }}">{{ product.name }}</a></li>
{% endfor %}
</ul>
</div>
<div class="col-6 col-md-3">
<div class="footer-heading">Resources</div>
<ul class="footer-list">
<li><a href="https://doc.openidentityplatform.org/" rel="noopener">Documentation</a></li>
<li><a href="/blog/">Blog</a></li>
<li><a href="{{ site.repo_url }}" rel="noopener">Downloads</a></li>
<li><a href="/privacy">Privacy</a></li>
</ul>
</div>
<div class="col-6 col-md-3">
<div class="footer-heading">Community</div>
<ul class="footer-list">
<li><a href="https://github.com/orgs/OpenIdentityPlatform/discussions" rel="noopener">Discussions</a></li>
<li><a href="{{ site.repo_url }}" rel="noopener">GitHub organization</a></li>
<li><a href="https://github.com/orgs/OpenIdentityPlatform/repositories" rel="noopener">Contribute</a></li>
</ul>
</div>
<div class="col-6 col-md-3">
<div class="footer-heading">Support</div>
<ul class="footer-list">
<li><a href="/support">Support &amp; Services</a></li>
<li><a href="/forgerock-alternative">ForgeRock Migration</a></li>
</ul>
</div>
</div>
<div class="row align-items-center footer-bottom pt-3">
<div class="col-8">
<a class="text-white align-middle" href="{{site.repo_url}}">&copy; {{site.title}}</a>
<span class="footer-meta d-none d-md-inline">&middot; 5 open-source products &middot; CDDL licensed</span>
</div>
<div class="col-4 text-end">
<a class="text-white pe-1" href="https://github.com/orgs/OpenIdentityPlatform/discussions" aria-label="Open Identity Platform Community Discussions"><svg style="fill:white;" height="36" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M8.501 4.001H10.5V24H8.501V4.001zm6.999 0V24h-2V4.001h2zM3.5 0h2.001v15H3.5V0zm15 4.001h2V15h-2V4.001z"/></svg></a>
<span target="_blank" class="align-middle" style="font-size: 36px; display: inline-block;" >
<span target="_blank" class="align-middle" style="font-size: 36px; display: inline-block;">
<a target="_blank" href="https://github.com/OpenIdentityPlatform" aria-label="Open Identity Platform GitHub"><i class="fa-brands fa-github"></i></a>
</span>
</div>
Expand Down
31 changes: 22 additions & 9 deletions _includes/header.html
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,6 @@
<link rel="stylesheet" href="{{'/assets/css/main.css'}}" >

<!-- Global site tag (gtag.js) - Google Analytics -->

<script async src="https://www.googletagmanager.com/gtag/js?id=G-Q5PEKRFRH8"></script>
<style>
#cookie-notice {padding: 0.5rem 1rem; display: none; text-align: center; position: fixed; bottom: 0; width: calc(100%); background: #222; color: rgba(255,255,255,0.8); z-index: 1;}
#cookie-notice a {display: inline-block; cursor: pointer; margin-left: 0.5rem;}
Expand Down Expand Up @@ -80,18 +78,33 @@
createCookie(name,"",-1);
}

if(readCookie('cookie-notice-dismissed')=='true') {
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-Q5PEKRFRH8');
} else {
// GA4 with Consent Mode v2. gtag is defined globally so any page can queue events;
// analytics storage stays denied until the visitor approves, then consent is updated
// live. This site runs no ads, so the ad_* signals are never granted.
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}

var analyticsConsent = readCookie('cookie-notice-dismissed') === 'true' ? 'granted' : 'denied';
gtag('consent', 'default', {
ad_storage: 'denied',
ad_user_data: 'denied',
ad_personalization: 'denied',
analytics_storage: analyticsConsent
});

gtag('js', new Date());
gtag('config', 'G-Q5PEKRFRH8');

if (analyticsConsent !== 'granted') {
document.getElementById('cookie-notice').style.display = 'block';
}
document.getElementById('cookie-notice-accept').addEventListener("click",function() {
createCookie('cookie-notice-dismissed','true',31);
document.getElementById('cookie-notice').style.display = 'none';
location.reload();
gtag('consent', 'update', {
analytics_storage: 'granted'
});
});

</script>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-Q5PEKRFRH8"></script>
5 changes: 4 additions & 1 deletion _includes/navbar.html
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,10 @@
</li>
<li class="nav-item">
<a target="_blank" class="nav-link" href="https://doc.openidentityplatform.org">Documentation</a>
</li>
</li>
<li class="nav-item {{page.navbar.support_active}}">
<a class="nav-link" href="/support">Support <span class="visually-hidden">(current)</span></a>
</li>
<li class="nav-item {{page.navbar.blog_active}}">
<a class="nav-link" href="/blog/">Blog <span class="visually-hidden">(current)</span></a>
</li>
Expand Down
1 change: 1 addition & 0 deletions _includes/scripts.html
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
{% include analytics-events.html %}
42 changes: 42 additions & 0 deletions _includes/structured-data.html
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,48 @@
}
</script>

{% comment %}Service schema on the support page{% endcomment %}
{%- if page.service_schema -%}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Service",
"serviceType": "Commercial support and consulting",
"name": {{ page.title | jsonify }},
"description": {{ page_description | jsonify }},
"url": "{{ page_url }}",
"provider": {
"@type": "Organization",
"name": "{{ site.title }}",
"url": "{{ site.url }}"
},
"areaServed": ["Europe", "Americas", "Asia-Pacific", "CIS"]
}
</script>
{%- endif -%}

{% comment %}FAQ schema on pages that declare a faq list{% endcomment %}
{%- if page.faq -%}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{%- for item in page.faq -%}
{
"@type": "Question",
"name": {{ item.q | jsonify }},
"acceptedAnswer": {
"@type": "Answer",
"text": {{ item.a | jsonify }}
}
}{%- unless forloop.last -%},{%- endunless -%}
{%- endfor -%}
]
}
</script>
{%- endif -%}

{% comment %}Product schema on product pages{% endcomment %}
{%- if page.product -%}
{%- assign product_data = site.data.products | where: "product", page.product | first -%}
Expand Down
15 changes: 15 additions & 0 deletions _includes/support-cta.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<!-- Commercial support CTA band. Built from Bootstrap utilities + the site's navy .bg-primary.
data-ga-* attributes are inert until the deferred GA event-tracking phase. -->
<div class="support-cta bg-primary text-white p-4 rounded my-4">
<div class="row align-items-center">
<div class="col-md-8 mb-3 mb-md-0">
<h3 class="h5 mb-1">Running {{ page.reponame | default: "Open Identity Platform" }} in production?</h3>
<p class="mb-0">Community help is free on GitHub. When you need SLAs, consulting, implementation, or migration, independent approved vendors are ready.</p>
</div>
<div class="col-md-4 text-md-end">
<a href="/support" class="btn btn-support" data-ga-event="support_cta_click" data-ga-location="product_{{ page.product | default: page.reponame | downcase }}">
<i class="fa-solid fa-headset me-2"></i>Support options
</a>
</div>
</div>
</div>
2 changes: 1 addition & 1 deletion _includes/widgets.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<div class="need-support-popover-container" style="display:none;">
<div class="need-support-popover">
<p>Open Identity Platform Community: <a href="https://github.com/orgs/OpenIdentityPlatform/discussions" target="_blank">Discussions</a></p>
<p>Commercial support: <a href="https://github.com/OpenIdentityPlatform/.github/wiki/Approved-Vendor-List">Approved Vendor List</a></p>
<p>Commercial support: <a href="/support" data-ga-event="support_cta_click" data-ga-location="widget_popover">SLAs &amp; approved vendors</a></p>
</div>
</div>
</div>
Expand Down
9 changes: 9 additions & 0 deletions _posts/2025-12-18-openam-vs-keycloak.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,15 @@ Realm support for isolation of identities and authentication processes
| SNMP Monitoring | ✅ [doc](https://doc.openidentityplatform.org/openam/admin-guide/chap-monitoring#monitoring-snmp) | ⛔️ |
| JMX Monitoring | ✅ [doc](https://doc.openidentityplatform.org/openam/admin-guide/chap-monitoring#monitoring-jmx) | ⛔️ |

## Summary

Both OpenAM and Keycloak are mature, standards-based, open-source IAM platforms, and either can anchor a serious SSO deployment. The right choice depends on your context rather than a single winner:

- **Choose OpenAM** if you need breadth of authentication modules and adaptive/chained authentication, protocols such as UMA 2.0, SNMP/JMX monitoring, policy agents for web/app servers, or a drop-in continuation of a ForgeRock-based architecture.
- **Choose Keycloak** if you want a newer admin UI out of the box and are already invested in the Red Hat / Quarkus ecosystem.

If you'd like help matching either platform to your requirements, or planning a migration, independent vendors offer paid consulting and implementation — see the [Support & Services](/support) page for options, while community help stays free on GitHub. Moving off a ForgeRock stack? OpenAM is a like-for-like open-source continuation — see the [ForgeRock alternative & migration path](/forgerock-alternative).

## Useful Links

### OpenAM:
Expand Down
Loading