விரைவுத் தொடக்கம்: எந்த OIDC லைப்ரரியும்
Usher ஒரு தரநிலை OpenID Connect வழங்குநர். உங்கள் மொழியில் சான்றளிக்கப்பட்ட OIDC கிளையன்ட் இருந்தால், உங்களுக்குத் தேவையான அனைத்தும் ஏற்கெனவே உங்களிடம் உள்ளன: அதை உங்கள் சூழலின் டிஸ்கவரி ஆவணத்தை நோக்கிக் காட்டி, PKCE உடன் அங்கீகாரக் குறியீட்டு ஃப்ளோவைப் பயன்படுத்துங்கள்.
அமைப்புகள்
| அமைப்பு | மதிப்பு |
|---|---|
| இஷ்யூவர் | https://<handle>.usherid.com |
| டிஸ்கவரி URL | https://<handle>.usherid.com/.well-known/openid-configuration |
| ஃப்ளோ | அங்கீகாரக் குறியீடு (response_type=code) |
| PKCE | கட்டாயம், code_challenge_method=S256 |
| ஸ்கோப்கள் | openid profile email offline_access |
| கிளையன்ட் அடையாளச் சரிபார்ப்பு | token_endpoint_auth_methods_supported இல் பட்டியலிடப்பட்டுள்ளபடி |
உங்கள் சூழலின் ஹேண்டில் Usher Console-இல், அதன் இஷ்யூவருக்கு அருகில் உள்ளது. டெவலப்மென்ட் சூழல்களுக்கு wise-otter-42 போன்ற சீரற்ற ஹேண்டில் கிடைக்கும்; புரொடக்ஷன் சூழல்களுக்கு நீங்கள் தேர்ந்தெடுத்த ஹேண்டில் இருக்கும். புரொடக்ஷன் சூழல் அதற்குப் பதிலாக login.acme.com போன்ற உங்கள் சொந்த டொமைனில் இருக்கலாம்: CNAME பதிவு மூலம் அந்த டொமைனை Usher-ஐ நோக்கிக் காட்டிய பிறகு, அதுவே அதன் இஷ்யூவர்.
டிஸ்கவரி ஆவணத்தைப் படியுங்கள்
உங்கள் கிளையன்ட்டுக்குத் தேவையான ஒவ்வொரு எண்ட்பாயிண்ட்டும் விசையும் இங்கே பட்டியலிடப்பட்டுள்ளன. URL-களை உங்கள் குறியீட்டில் நகலெடுப்பதற்குப் பதிலாக, உங்கள் லைப்ரரியே இதைப் படிக்கட்டும்.
curl -s https://acme.usherid.com/.well-known/openid-configuration | jq{
"issuer": "https://acme.usherid.com",
"authorization_endpoint": "https://acme.usherid.com/api/auth/oauth2/authorize",
"token_endpoint": "https://acme.usherid.com/api/auth/oauth2/token",
"userinfo_endpoint": "https://acme.usherid.com/api/auth/oauth2/userinfo",
"jwks_uri": "https://acme.usherid.com/api/auth/jwks",
"introspection_endpoint": "https://acme.usherid.com/api/auth/oauth2/introspect",
"revocation_endpoint": "https://acme.usherid.com/api/auth/oauth2/revoke",
"end_session_endpoint": "https://acme.usherid.com/api/auth/oauth2/end-session",
"scopes_supported": ["openid", "profile", "email", "offline_access"],
"response_types_supported": ["code"],
"grant_types_supported": ["authorization_code", "refresh_token", "client_credentials"],
"code_challenge_methods_supported": ["S256"]
}ஃப்ளோ
அந்த நபரை அங்கீகார எண்ட்பாயிண்ட்டுக்கு அனுப்புங்கள்
சீரற்ற PKCE சரிபார்ப்பியை உருவாக்கி, அதைச் சீரற்ற state உடன், இந்த பிரவுசரின் அமர்வு மட்டுமே அணுகக்கூடிய இடத்தில் வையுங்கள் (குறுகிய ஆயுள் கொண்ட httpOnly குக்கீ நன்றாக வேலை செய்யும்). பிறகு response_type=code, உங்கள் client_id, redirect_uri, மேலே உள்ள ஸ்கோப்கள், state, உங்கள் சரிபார்ப்பியின் S256 code_challenge ஆகியவற்றுடன் திசைதிருப்புங்கள்.
அவர்களை உள்நுழைய விடுங்கள்
இங்கிருந்து லாபி பார்த்துக்கொள்கிறது: அது உங்கள் ஆப்ஸைப் பெயரிடுகிறது, உங்கள் சூழல் அனுமதிக்கும் உள்நுழைவு முறைகளை வழங்குகிறது, முதல் முறை ஒப்புதல் கேட்கிறது.
கால்பேக்கைச் சரிபாருங்கள்
Usher, code, state உடன் உங்கள் redirect_uri க்குத் திசைதிருப்புகிறது. நீங்கள் சேமித்ததுடன் state பொருந்தாவிட்டால் பதிலை மறுத்துவிடுங்கள். குறியீடு ஒருமுறை மட்டுமே பயன்படும், ஐந்து நிமிடங்கள் நீடிக்கும்.
குறியீட்டை டோக்கன்களாக மாற்றுங்கள்
உங்கள் சர்வரிலிருந்து, குறியீட்டையும் PKCE சரிபார்ப்பியையும் டோக்கன் எண்ட்பாயிண்ட்டுக்கு POST செய்யுங்கள்:
curl -s -X POST https://acme.usherid.com/api/auth/oauth2/token \
-u "$CLIENT_ID:$CLIENT_SECRET" \
-d grant_type=authorization_code \
-d code="$CODE" \
-d redirect_uri=https://app.acme.example/callback \
-d code_verifier="$CODE_VERIFIER"ID டோக்கனைச் சரிபாருங்கள்
அதன் கையொப்பத்தை jwks_uri இல் உள்ள விசைகளுக்கு எதிராகச் சரிபாருங்கள், iss உங்கள் இஷ்யூவர் என்பதையும், aud உங்கள் கிளையன்ட் ID என்பதையும், exp எதிர்காலத்தில் உள்ளது என்பதையும் சரிபாருங்கள். உங்கள் லைப்ரரி இதை உங்களுக்காகச் செய்கிறது; அது முடக்கப்படவில்லை என்பதை உறுதிசெய்யுங்கள்.
Node.js-இல்
openid-client சரிபார்ப்பு உட்பட மேலே உள்ள அனைத்தையும் செய்கிறது:
import * as client from 'openid-client'
// discovery: every endpoint and key comes from the issuer
const config = await client.discovery(
new URL('https://acme.usherid.com'),
process.env.USHER_CLIENT_ID!,
process.env.USHER_CLIENT_SECRET!,
)
// 1. send them to the Lobby, with PKCE (S256) and a state to check later
const codeVerifier = client.randomPKCECodeVerifier()
const state = client.randomState()
const url = client.buildAuthorizationUrl(config, {
redirect_uri: 'https://app.acme.example/callback',
scope: 'openid profile email offline_access',
code_challenge: await client.calculatePKCECodeChallenge(codeVerifier),
code_challenge_method: 'S256',
state,
})
// keep codeVerifier and state in a short-lived httpOnly cookie, then redirect to url
// 2. back at /callback: swap the code for tokens
const tokens = await client.authorizationCodeGrant(config, new URL(request.url), {
pkceCodeVerifier: codeVerifier,
expectedState: state,
})
const { sub, email, name } = tokens.claims()!பிற மொழிகளில்
பரவலாகப் பயன்படுத்தப்படும் இந்த லைப்ரரிகள் அனைத்தும் தரநிலை OpenID Connect பேசுகின்றன, Usher-க்கே உரிய எதுவும் இல்லாமல் Usher உடன் வேலை செய்கின்றன:
| மொழி | லைப்ரரி |
|---|---|
| Python | Authlib |
| Go | coreos/go-oidc with golang.org/x/oauth2 |
| Java | Spring Security OAuth 2.0 Client |
| .NET | Microsoft.AspNetCore.Authentication.OpenIdConnect |
| Ruby | omniauth_openid_connect |
| PHP | jumbojett/openid-connect-php |
உள்நுழைந்தே இருத்தல்
offline_access ஸ்கோப் இருந்தால், டோக்கன் பதிலில் ரிஃப்ரெஷ் டோக்கன் இருக்கும். பழைய அணுகல் டோக்கன் காலாவதியாகும்போது புதியதைப் பெற, அதை grant_type=refresh_token உடன் பயன்படுத்துங்கள். ரிஃப்ரெஷ் டோக்கன்கள் சுழல்கின்றன: ஒவ்வொரு பயன்பாடும் புதியதைத் தருகிறது, பழையது வேலை செய்வதை நிறுத்துகிறது.
வெளியேறுதல்
முதலில் உங்கள் சொந்த அமர்வை அழியுங்கள், பிறகு post_logout_redirect_uri உடன் (உங்களிடம் இருந்தால் id_token_hint உடனும்) end_session_endpoint க்குத் திசைதிருப்புங்கள், அப்போது லாபியும் அந்த நபரை மறந்துவிடும்.