Benutzer mit einem Casdoor SDK anmelden
Dieser Leitfaden listet die Casdoor SDKs auf und erklärt, wie man Benutzer über ein Frontend-SDK und ein Backend-SDK in einer Web-Anwendung anmeldet. Die Beispiele verwenden casdoor-js-sdk und casdoor-go-sdk. Die anderen SDKs folgen denselben Schritten.
Lernziele
- Wählen Sie die SDKs für Ihre Plattform aus.
- Konfigurieren Sie das Backend-SDK und das Frontend-SDK.
- Tauschen Sie den Autorisierungscode gegen ein Access Token aus und überprüfen Sie das Token.
- Halten Sie den Benutzer in Ihrer Anwendung angemeldet.
- Verwalten Sie Benutzer und Anwendungen über das SDK.
Voraussetzungen
- Eine laufende Casdoor-Instanz
- Eine Anwendung in Casdoor, mit der Callback-URL Ihrer Anwendung in Redirect URLs
- Die Client ID und das Client Secret der Anwendung sowie der öffentliche Schlüssel ihres Zertifikats
Über die SDKs
Die Casdoor SDKs basieren auf OpenID Connect (OIDC) und fügen Funktionen der Casdoor API hinzu, wie Benutzerverwaltung und Datei-Upload. Sie erfordern etwas mehr Einrichtung als ein standardmäßiger OIDC-Client und bieten Ihnen die volle Casdoor API.
- Frontend SDKs: Für Web-Frontends, mobile Apps und Desktop-Apps. Sie erstellen die Anmelde-URL und verarbeiten den Callback in der UI.
- Backend SDKs: Für Ihren Server. Sie tauschen den Autorisierungscode aus, verifizieren Tokens und rufen die Casdoor API auf.
Wenn Ihre Anwendung ein separates Frontend und Backend hat, verwenden Sie ein Frontend-SDK in der UI und ein Backend-SDK auf dem Server. Ein Beispiel finden Sie unter casdoor-python-vue-sdk-example. Wenn Ihre Anwendung Seiten serverseitig rendert, wie JSP- und PHP-Anwendungen, kann ein Backend-SDK allein ausreichend sein.
SDK auswählen
Alle offiziellen SDKs befinden sich in der casdoor Organisation auf GitHub.
Web-Frontend-SDKs
| Web-Frontend-SDK | Beschreibung | SDK-Code | Beispielcode |
|---|---|---|---|
| Javascript SDK | Für traditionelle Nicht-SPA-Websites | casdoor-js-sdk | Nodejs backend: casdoor-raw-js-example Go backend: casdoor-go-react-sdk-example |
| Frontend-only SDK | Für Frontend-only-SPA-Websites | casdoor-js-sdk | casdoor-react-only-example |
| React SDK | Für React-Websites | casdoor-react-sdk | Nodejs backend: casdoor-nodejs-react-example Java backend: casdoor-spring-security-react-example |
| Next.js SDK | Für Next.js-Websites | nextjs-auth | |
| Nuxt SDK | Für Nuxt-Websites | nuxt-auth | |
| Vue SDK | For Vue websites | casdoor-vue-sdk | casdoor-python-vue-sdk-example |
| Angular SDK | For Angular websites | casdoor-angular-sdk | casdoor-nodejs-angular-example |
| Flutter SDK | For Flutter Web websites | casdoor-flutter-sdk | casdoor-flutter-example |
| ASP.NET SDK | For ASP.NET Blazor WASM websites | Blazor.BFF.OpenIDConnect.Template | casdoor-dotnet-blazorwasm-oidc-example |
| Firebase SDK | Für Google Firebase-Apps | casdoor-firebase-example |
Web-Backend-SDKs
| Web-Backend-SDK | Beschreibung | SDK-Code | Beispielcode |
|---|---|---|---|
| Go SDK | Für Go-Backends | casdoor-go-sdk | casdoor-go-react-sdk-example |
| Java SDK | Für Java-Backends | casdoor-java-sdk | casdoor-spring-boot-starter, casdoor-spring-boot-example, casdoor-spring-security-react-example, quarkus-casdoor-auth (Quarkus) |
| Node.js SDK | Für Node.js-Backends | casdoor-nodejs-sdk | casdoor-nodejs-react-example |
| Python SDK | Für Python-Backends | casdoor-python-sdk | Flask: casdoor-python-vue-sdk-example Django: casdoor-django-js-sdk-example FastAPI: casdoor-fastapi-js-sdk-example |
| PHP SDK | Für PHP-Backends | casdoor-php-sdk | wordpress-casdoor-plugin |
| .NET SDK | Für ASP.NET-Backends | casdoor-dotnet-sdk | casdoor-dotnet-sdk-example |
| Rust SDK | Für Rust-Backends | casdoor-rust-sdk | casdoor-rust-example |
| C/C++ SDK | Für C/C++-Backends | casdoor-cpp-sdk | casdoor-cpp-qt-example |
| Dart SDK | Für Dart-Backends | casdoor-dart-sdk | |
| Ruby SDK | Für Ruby-Backends | casdoor-ruby-sdk |
Mobile SDKs
| Mobile SDK | Beschreibung | SDK-Code | Beispielcode |
|---|---|---|---|
| Android SDK | Für Android-Apps | casdoor-android-sdk | casdoor-android-example |
| iOS SDK | Für iOS-Apps | casdoor-ios-sdk | casdoor-ios-example |
| React Native SDK | Für React Native-Apps | casdoor-react-native-sdk | casdoor-react-native-example |
| Flutter SDK | Für Flutter-Apps | casdoor-flutter-sdk | casdoor-flutter-example |
| Firebase SDK | Für Google Firebase-Apps | casdoor-firebase-example | |
| Unity Games SDK | Für Unity 2D/3D PC/Mobile-Spiele | casdoor-dotnet-sdk | casdoor-unity-example |
| uni-app SDK | Für uni-app-Apps | casdoor-uniapp-sdk | casdoor-uniapp-example |
Eine mobile App, die Benutzer nativ ohne Browser anmeldet, kann den verification code grant für die Anmeldung per SMS oder E-Mail mit automatischer Registrierung verwenden. Angemeldete Benutzer können auch den QR-Code auf der Anmeldeseite Ihrer Website über die App genehmigen.
Desktop-SDKs
| Desktop SDK | Beschreibung | SDK-Code | Beispielcode |
|---|---|---|---|
| Electron SDK | Für Electron-Apps | casdoor-js-sdk | casdoor-electron-example |
| .NET Desktop SDK | Für .NET-Desktop-Apps | casdoor-dotnet-sdk | WPF: casdoor-dotnet-desktop-example WinForms: casdoor-dotnet-winform-example Avalonia UI: casdoor-dotnet-avalonia-example |
| C/C++ SDK | Für C/C++-Desktop-Apps | casdoor-cpp-sdk | casdoor-cpp-qt-example |
Backend-SDK konfigurieren
Wenn Ihr Backend startet, initialisieren Sie das SDK mit der Adresse von Casdoor und den Anmeldeinformationen der Anwendung. Mit casdoor-go-sdk:
var CasdoorEndpoint = "https://door.casdoor.com"
var ClientId = "541738959670d221d59d"
var ClientSecret = "66863369a64a5863827cf949bab70ed560ba24bf"
var CasdoorOrganization = "casbin"
var CasdoorApplication = "app-casnode"
//go:embed token_jwt_key.pem
var JwtPublicKey string
func init() {
auth.InitConfig(CasdoorEndpoint, ClientId, ClientSecret, JwtPublicKey, CasdoorOrganization, CasdoorApplication)
}
InitConfig() akzeptiert die folgenden Parameter:
| Konfigurationsparameter | Muss | Beschreibung |
|---|---|---|
| Endpunkt | Ja | Casdoor Server URL, like https://door.casdoor.com or http://localhost:8000 |
| clientId | Ja | Client-ID für die Casdoor-Anwendung |
| clientSecret | Ja | Client-Geheimnis für die Casdoor-Anwendung |
| jwtPublicKey | Ja | Der öffentliche Schlüssel für das Zertifikat der Casdoor-Anwendung |
| organizationName | Ja | Der Name für die Casdoor-Organisation |
| applicationName | Nein | Der Name für die Casdoor-Anwendung |
So erhalten Sie den Wert von jwtPublicKey:
-
Öffnen Sie in der Casdoor-Admin-Konsole die Seite Certs.

-
Öffnen Sie das Zertifikat und kopieren oder laden Sie dessen öffentlichen Schlüssel herunter.

-
Wählen Sie auf der Bearbeitungsseite der Anwendung dasselbe Zertifikat unter Cert aus.

Frontend-SDK konfigurieren
-
Installieren Sie
casdoor-js-sdkmit npm:npm install casdoor-js-sdkOder mit Yarn:
yarn add casdoor-js-sdk -
Definieren Sie Hilfsfunktionen in einer gemeinsamen Datei, z. B.
Setting.js:import Sdk from "casdoor-js-sdk";
export function initCasdoorSdk(config) {
CasdoorSdk = new Sdk(config);
}
export function getSignupUrl() {
return CasdoorSdk.getSignupUrl();
}
export function getSigninUrl() {
return CasdoorSdk.getSigninUrl();
}
export function getUserProfileUrl(userName, account) {
return CasdoorSdk.getUserProfileUrl(userName, account);
}
export function getMyProfileUrl(account) {
return CasdoorSdk.getMyProfileUrl(account);
}
export function getMyResourcesUrl(account) {
return CasdoorSdk.getMyProfileUrl(account).replace("/account?", "/resources?");
}
export function signin() {
return CasdoorSdk.signin(ServerUrl);
}
export function showMessage(type, text) {
if (type === "") {
return;
} else if (type === "success") {
message.success(text);
} else if (type === "error") {
message.error(text);
}
}
export function goToLink(link) {
window.location.href = link;
} -
Initialisieren Sie das SDK in der Einstiegsdatei des Frontends, z. B.
index.jsoderapp.jsin React. Verwenden Sie dieselben Werte für die ersten vier Einstellungen wie im Backend-SDK.redirectPathist der Pfad Ihrer Anwendung, zu dem Casdoor den Benutzer nach der Anmeldung zurückleitet.const config = {
serverUrl: "https://door.casdoor.com",
clientId: "014ae4bd048734ca2dea",
organizationName: "casbin",
appName: "app-casnode",
redirectPath: "/callback",
};
xxx.initCasdoorSdk(config); -
Behandeln Sie die Callback-Route. In diesem React-Beispiel verarbeitet eine Komponente
/callbackund leitet den Code an das Backend weiter. Überspringen Sie diesen Schritt, wenn Casdoor direkt an Ihr Backend weiterleitet, wie es bei JSP- und PHP-Anwendungen der Fall ist.import React from "react";
import {Button, Result, Spin} from "antd";
import {withRouter} from "react-router-dom";
import * as Setting from "./Setting";
class AuthCallback extends React.Component {
constructor(props) {
super(props);
this.state = {
classes: props,
msg: null,
};
}
componentWillMount() {
this.login();
}
login() {
Setting.signin().then((res) => {
if (res.status === "ok") {
Setting.showMessage("success", `Logged in successfully`);
Setting.goToLink("/");
} else {
this.setState({
msg: res.msg,
});
}
});
}
render() {
return (
<div style={{textAlign: "center"}}>
{this.state.msg === null ? (
<Spin
size="large"
tip="Signing in..."
style={{paddingTop: "10%"}}
/>
) : (
<div style={{display: "inline"}}>
<Result
status="error"
title="Login Error"
subTitle={this.state.msg}
extra={[
<Button type="primary" key="details">
Details
</Button>,
<Button key="help">Help</Button>,
]}
/>
</div>
)}
</div>
);
}
}
export default withRouter(AuthCallback);
Links zur Anmeldung und Registrierung anzeigen
Stellen Sie Benutzern eine Sign in- und eine Sign up-Schaltfläche oder einen Link bereit. Rufen Sie die URLs vom Frontend-SDK oder Backend-SDK ab. Siehe URLs für Anmeldung und Registrierung.
Zugriffstoken abrufen und überprüfen
Der Anmeldeablauf umfasst drei Schritte:
-
Der Benutzer klickt auf den Anmelde-Link und gelangt zur Casdoor-Anmeldeseite, zum Beispiel:
https://door.casdoor.com/login/oauth/authorize?client_id=014ae4bd048734ca2dea&response_type=code&redirect_uri=https%3A%2F%2Fforum.casbin.com%2Fcallback&scope=read&state=app-casnode -
Der Benutzer gibt einen Benutzernamen und ein Passwort ein und klickt auf Sign In, oder klickt auf die Schaltfläche eines Providers, z. B. die GitHub-Schaltfläche.
-
Casdoor leitet den Benutzer mit einem Autorisierungscode an Ihre Anwendung weiter, zum Beispiel
https://forum.casbin.com?code=xxx&state=yyy.
Ihr Backend tauscht dann den Code gegen ein Zugriffstoken mit GetOAuthToken() aus und überprüft das Token mit ParseJwtToken():
// get code and state from the GET parameters of the redirected URL
code := c.Input().Get("code")
state := c.Input().Get("state")
// exchange the access token with code and state
token, err := auth.GetOAuthToken(code, state)
if err != nil {
panic(err)
}
// verify the access token
claims, err := auth.ParseJwtToken(token.AccessToken)
if err != nil {
panic(err)
}
Wenn ParseJwtToken() keinen Fehler zurückgibt, ist das Token gültig und wurde von Casdoor ausgestellt. Der Benutzer ist angemeldet. Verwenden Sie die zurückgegebenen claims, um den Benutzer zu identifizieren. Ein vollständiges Beispiel finden Sie im Anmeldehandler von Casnode, einem in Go geschriebenen Forum.
Benutzer angemeldet halten
Wie Ihre Anwendung sich an den Benutzer erinnert, ist eine eigene Designentscheidung und nicht Teil von OIDC, OAuth 2.0 oder Casdoor. Dieser Abschnitt beschreibt zwei gängige Methoden.
Die claims, die ParseJwtToken() zurückgibt, haben den folgenden Typ:
type Claims struct {
User
AccessToken string `json:"accessToken"`
jwt.RegisteredClaims
}
| Field | Description |
|---|---|
User | The user, with all profile fields. See User |
AccessToken | The access token string |
jwt.RegisteredClaims | The standard claims of a JSON Web Token (JWT) |
In Casdoor trägt das Zugriffstoken dieselben Benutzer-Claims wie das ID-Token, enthält also Informationen über den angemeldeten Benutzer. Es handelt sich dennoch um zwei separate Tokens mit unterschiedlichem tokenType-Claim und möglicherweise unterschiedlichem aud. Siehe Zugriffstoken und ID-Token.
Serverseitige Sitzung verwenden
Speichern Sie die Claims in der Sitzung Ihres Web-Frameworks. Wie Sie das tun, hängt von der Sprache und dem Framework ab. Casnode verwendet das Beego-Framework und speichert den Benutzer mit c.SetSessionUser():
token, err := auth.GetOAuthToken(code, state)
if err != nil {
panic(err)
}
claims, err := auth.ParseJwtToken(token.AccessToken)
if err != nil {
panic(err)
}
claims.AccessToken = token.AccessToken
c.SetSessionUser(claims) // set session
Zugriffstoken als JWT verwenden
Das Zugriffstoken ist ein JWT. Wenn Ihre Anwendung Sitzungen in JWTs speichert, verwenden Sie das Zugriffstoken direkt:
- Senden Sie das Zugriffstoken an das Frontend und speichern Sie es dort, z. B. im
localStoragedes Browsers. - Senden Sie das Zugriffstoken bei jeder Anfrage an das Backend.
- Überprüfen Sie das Token im Backend mit
ParseJwtToken()oder einer eigenen Funktion und lesen Sie den angemeldeten Benutzer daraus.
Benutzer über das SDK verwalten
Die Backend-SDKs kapseln die Casdoor API. Dieser Teil ist weder OIDC noch OAuth 2.0. Die Funktionen umfassen:
| Function | Description |
|---|---|
GetUser(name string) | Gets a user by username |
GetUsers() | Gets all users |
AddUser() | Adds a user |
UpdateUser() | Updates a user |
DeleteUser() | Deletes a user |
CheckUserPassword(auth.User) | Überprüft das Passwort eines Benutzers |
Wenn das SDK keine Funktion für einen Endpunkt hat, rufen Sie die Casdoor API direkt auf.
Anwendungen über das SDK verwalten
| Function | Description |
|---|---|
AddApplication() | Creates an application |
GetApplication(name string) | Ruft eine Anwendung anhand des Namens ab |
GetApplications() | Gets all applications |
UpdateApplication() | Updates an application |
DeleteApplication() | Deletes an application |
Wenn Sie eine Anwendung mit AddApplication() erstellen, füllt Casdoor die Standard-Registrierungselemente (ID, Username, Display name, Password, Confirm password, Email, Phone, Agreement), Anmeldeelemente und Anmeldeverfahren automatisch aus. Die Anwendung funktioniert in der Benutzeroberfläche ohne weitere Konfiguration.