Kodexempel
Alla exempel gör samma sak: skickar användaren till Aegis och tar emot resultatet.
Byt ut DITT-CLIENT-ID och din callback-adress.
ASP.NET Core
// Program.cs
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = "aegis";
})
.AddCookie()
.AddOpenIdConnect("aegis", options =>
{
options.Authority = "https://login.aegiscentralid.se/";
options.ClientId = "DITT-CLIENT-ID";
options.ClientSecret = builder.Configuration["Aegis:ClientSecret"];
options.ResponseType = "code";
options.UsePkce = true;
options.Scope.Clear();
options.Scope.Add("openid");
options.Scope.Add("profile");
options.Scope.Add("email");
options.Scope.Add("tenant.role");
options.CallbackPath = "/callback";
options.SaveTokens = true;
});
Läs anspråken som vanligt:
var epost = User.FindFirst(ClaimTypes.Email)?.Value;
var roll = User.FindFirst("tenant_role")?.Value;
Node
// npm i openid-client
import * as client from "openid-client";
const config = await client.discovery(
new URL("https://login.aegiscentralid.se/"),
"DITT-CLIENT-ID",
process.env.AEGIS_CLIENT_SECRET);
// Skicka användaren till Aegis
const verifier = client.randomPKCECodeVerifier();
const challenge = await client.calculatePKCECodeChallenge(verifier);
req.session.verifier = verifier; // behövs vid återkomsten
const url = client.buildAuthorizationUrl(config, {
redirect_uri: "https://din-sajt.se/callback",
scope: "openid profile email tenant.role",
code_challenge: challenge,
code_challenge_method: "S256"
});
res.redirect(url.href);
// Ta emot svaret
const tokens = await client.authorizationCodeGrant(
config,
new URL(req.url, "https://din-sajt.se"),
{ pkceCodeVerifier: req.session.verifier });
const claims = tokens.claims();
PHP
<?php
// composer require jumbojett/openid-connect-php
use Jumbojett\OpenIDConnectClient;
$oidc = new OpenIDConnectClient(
'https://login.aegiscentralid.se/',
'DITT-CLIENT-ID',
getenv('AEGIS_CLIENT_SECRET'));
$oidc->setRedirectURL('https://din-sajt.se/callback.php');
$oidc->addScope(['openid', 'profile', 'email', 'tenant.role']);
$oidc->setCodeChallengeMethod('S256');
$oidc->authenticate();
$namn = $oidc->requestUserInfo('name');
$epost = $oidc->requestUserInfo('email');
$roll = $oidc->getVerifiedClaims('tenant_role');
Python
# pip install authlib flask
from authlib.integrations.flask_client import OAuth
oauth = OAuth(app)
oauth.register(
name="aegis",
server_metadata_url="https://login.aegiscentralid.se/.well-known/openid-configuration",
client_id="DITT-CLIENT-ID",
client_secret=os.environ["AEGIS_CLIENT_SECRET"],
client_kwargs={
"scope": "openid profile email tenant.role",
"code_challenge_method": "S256",
})
@app.route("/login")
def login():
return oauth.aegis.authorize_redirect("https://din-sajt.se/callback")
@app.route("/callback")
def callback():
token = oauth.aegis.authorize_access_token()
anvandare = token["userinfo"]
return f"Inloggad som {anvandare['email']} ({anvandare['tenant_role']})"
Ren HTML, utan backend
<script src="https://login.aegiscentralid.se/embed.js"
data-client-id="DITT-CLIENT-ID"
data-redirect="https://din-sajt.se/callback"
data-scope="openid profile email"></script>
<div class="aegis-signin"></div>
På callback-sidan:
<script src="https://login.aegiscentralid.se/embed.js"
data-client-id="DITT-CLIENT-ID"
data-redirect="https://din-sajt.se/callback"></script>
<script>
Aegis.completeLogin()
.then(function (tokens) {
// tokens.id_token, tokens.access_token
})
.catch(function (fel) {
console.error(fel.message);
});
</script>
Har du en server, låt den göra utbytet. Tokens som hamnar i webbläsaren kan läsas av varje skript på sidan. Det här alternativet finns för sajter som saknar backend helt.
Någon annan stack
Aegis följer OpenID Connect Discovery, så vilket certifierat bibliotek som helst fungerar. Tre saker gäller alltid:
- Peka biblioteket på upptäcktsdokumentet.
- Be om
response_type=code. Implicit flow finns inte hos oss. - Slå på PKCE med
S256. Metodenplaingodtas inte.