ತ್ವರಿತ ಆರಂಭ: ಯಾವುದೇ 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"]
}ಫ್ಲೋ
ವ್ಯಕ್ತಿಯನ್ನು authorization ಎಂಡ್ಪಾಯಿಂಟ್ಗೆ ಕಳುಹಿಸಿ
ಯಾದೃಚ್ಛಿಕ PKCE verifier ರಚಿಸಿ ಮತ್ತು ಅದನ್ನು, ಯಾದೃಚ್ಛಿಕ state ಜೊತೆಗೆ, ಈ ಬ್ರೌಸರ್ನ ಸೆಷನ್ ಮಾತ್ರ ತಲುಪಬಹುದಾದ ಸ್ಥಳದಲ್ಲಿ ಇಡಿ (ಅಲ್ಪಾವಧಿಯ, httpOnly ಕುಕೀ ಚೆನ್ನಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತದೆ). ನಂತರ response_type=code, ನಿಮ್ಮ client_id ಮತ್ತು redirect_uri, ಮೇಲಿನ ಸ್ಕೋಪ್ಗಳು, state, ಮತ್ತು ನಿಮ್ಮ verifier ನ S256 code_challenge ಜೊತೆಗೆ ರೀಡೈರೆಕ್ಟ್ ಮಾಡಿ.
ಅವರು ಸೈನ್ ಇನ್ ಮಾಡಲಿ
ಇಲ್ಲಿಂದ ಮುಂದೆ ಲಾಬಿ ನೋಡಿಕೊಳ್ಳುತ್ತದೆ: ಅದು ನಿಮ್ಮ ಆ್ಯಪ್ನ ಹೆಸರು ತೋರಿಸುತ್ತದೆ, ನಿಮ್ಮ ಎನ್ವಿರಾನ್ಮೆಂಟ್ ಅನುಮತಿಸುವ ಸೈನ್-ಇನ್ ವಿಧಾನಗಳನ್ನು ನೀಡುತ್ತದೆ, ಮತ್ತು ಮೊದಲ ಬಾರಿ ಸಮ್ಮತಿ ಕೇಳುತ್ತದೆ.
ಕಾಲ್ಬ್ಯಾಕ್ ಪರಿಶೀಲಿಸಿ
Usher code ಮತ್ತು state ಜೊತೆಗೆ ನಿಮ್ಮ redirect_uri ಗೆ ರೀಡೈರೆಕ್ಟ್ ಮಾಡುತ್ತದೆ. state ನೀವು ಸಂಗ್ರಹಿಸಿದ್ದಕ್ಕೆ ಹೊಂದಿಕೆಯಾಗದಿದ್ದರೆ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ನಿರಾಕರಿಸಿ. ಕೋಡ್ ಒಂದೇ ಬಳಕೆಯದ್ದು ಮತ್ತು ಐದು ನಿಮಿಷ ಉಳಿಯುತ್ತದೆ.
ಕೋಡ್ ಅನ್ನು ಟೋಕನ್ಗಳಿಗೆ ಬದಲಾಯಿಸಿ
ನಿಮ್ಮ ಸರ್ವರ್ನಿಂದ, ಕೋಡ್ ಮತ್ತು PKCE verifier ಅನ್ನು ಟೋಕನ್ ಎಂಡ್ಪಾಯಿಂಟ್ಗೆ ಪೋಸ್ಟ್ ಮಾಡಿ:
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 | golang.org/x/oauth2 ಜೊತೆಗೆ coreos/go-oidc |
| 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 ಗೆ ರೀಡೈರೆಕ್ಟ್ ಮಾಡಿ, ಇದರಿಂದ ಲಾಬಿಯೂ ವ್ಯಕ್ತಿಯನ್ನು ಮರೆಯುತ್ತದೆ.