saml2
Version:
SAML 2.0 IDP-agnostic transports and logic
195 lines (134 loc) • 7.25 kB
HTML
<html>
<head>
<title>identity-provider-example.js</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
<link rel="stylesheet" media="all" href="docco.css" />
</head>
<body>
<div id="container">
<div id="background"></div>
<ul id="jump_to">
<li>
<a class="large" href="javascript:void(0);">Jump To …</a>
<a class="small" href="javascript:void(0);">+</a>
<div id="jump_wrapper">
<div id="jump_page">
<a class="source" href="identity-provider-example.html">
identity-provider-example.js
</a>
<a class="source" href="index.html">
index.js
</a>
<a class="source" href="identity-provider.html">
identity-provider.js
</a>
<a class="source" href="oasis_names_tc_saml__2_0_assertion.html">
oasis_names_tc_saml__2_0_assertion.js
</a>
<a class="source" href="oasis_names_tc_saml__2_0_metadata.html">
oasis_names_tc_saml__2_0_metadata.js
</a>
<a class="source" href="oasis_names_tc_saml__2_0_protocol.html">
oasis_names_tc_saml__2_0_protocol.js
</a>
<a class="source" href="oasis_names_tc_xacml__3_0_core_schema_wd_17.html">
oasis_names_tc_xacml__3_0_core_schema_wd_17.js
</a>
<a class="source" href="org_w3__2000__09_xmldsig.html">
org_w3__2000__09_xmldsig.js
</a>
<a class="source" href="org_w3__2001__04_xmlenc.html">
org_w3__2001__04_xmlenc.js
</a>
<a class="source" href="protocol.html">
protocol.js
</a>
<a class="source" href="service-provider.html">
service-provider.js
</a>
<a class="source" href="transport-post-consumer.html">
transport-post-consumer.js
</a>
<a class="source" href="transport-post.html">
transport-post.js
</a>
<a class="source" href="transport-redirect-consumer.html">
transport-redirect-consumer.js
</a>
<a class="source" href="transport-redirect-producer.html">
transport-redirect-producer.js
</a>
<a class="source" href="transport-redirect.html">
transport-redirect.js
</a>
<a class="source" href="service-provider-example.html">
service-provider-example.js
</a>
</div>
</li>
</ul>
<ul class="sections">
<li id="title">
<div class="annotation">
<h1>identity-provider-example.js</h1>
</div>
</li>
<li id="section-1">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-1">¶</a>
</div>
</div>
<div class="content"><div class='highlight'><pre>#!<span class="regexp">/usr/</span>bin/env node
<span class="keyword">var</span> http = require(<span class="string">"http"</span>),
url = require(<span class="string">"url"</span>);
<span class="keyword">var</span> saml2 = require(<span class="string">"./"</span>);
<span class="keyword">var</span> server = http.createServer(<span class="function"><span class="keyword">function</span><span class="params">(req, res)</span> {</span>
<span class="keyword">var</span> uri = url.parse(req.url, <span class="literal">true</span>);
console.log(<span class="keyword">new</span> Date(), req.method, uri.path);
<span class="keyword">if</span> (uri.pathname === <span class="string">"/saml2/sso/Redirect"</span>) {
<span class="keyword">return</span> saml2.Transport.Redirect.consume(req, <span class="function"><span class="keyword">function</span><span class="params">(err, body)</span> {</span>
<span class="keyword">if</span> (err) {
<span class="keyword">return</span> res.end(<span class="string">"OH NO ERROR"</span>);
}
<span class="keyword">if</span> (!body.samlRequest) {
res.writeHead(<span class="number">406</span>);
<span class="keyword">return</span> res.end(<span class="string">"no SAML request found"</span>);
}
<span class="keyword">if</span> (!body.samlRequest.name || body.samlRequest.name.key !== <span class="string">"{urn:oasis:names:tc:SAML:2.0:protocol}AuthnRequest"</span>) {
res.writeHead(<span class="number">406</span>);
<span class="keyword">return</span> res.end(<span class="string">"body is not an AuthnRequest"</span>);
}
<span class="keyword">if</span> (!body.samlRequest.value.issuer) {
res.writeHead(<span class="number">403</span>);
<span class="keyword">return</span> res.end(<span class="string">"AuthnRequest sent with no issuer"</span>);
}
<span class="keyword">if</span> (body.samlRequest.value.issuer.value !== <span class="string">"fknsrsbiz-testing"</span>) {
res.writeHead(<span class="number">403</span>);
<span class="keyword">return</span> res.end(<span class="string">"invalid issuer for AuthnRequest"</span>);
}
res.writeHead(<span class="number">200</span>, {
<span class="string">"content-type"</span>: <span class="string">"application/json"</span>,
});
res.end(JSON.stringify(body.samlRequest, <span class="literal">null</span>, <span class="number">2</span>));
});
}
res.writeHead(<span class="number">404</span>);
res.end(<span class="string">"not found!"</span>);
});
server.listen(<span class="number">3001</span>, <span class="function"><span class="keyword">function</span><span class="params">()</span> {</span>
console.log(<span class="string">""</span>);
console.log(<span class="string">"Identity provider example now listening!"</span>);
console.log(<span class="string">""</span>);
console.log(<span class="string">"Use http://127.0.0.1:3001/saml2/sso/Redirect as an identity provider!"</span>);
console.log(<span class="string">""</span>);
console.log(<span class="string">"--------"</span>);
console.log(<span class="string">""</span>);
});</pre></div></div>
</li>
</ul>
</div>
</body>
</html>