In diesem Beispiel wird unser kostenloser .NET-App-Sicherheit und unser Web-API-Dienst verwendet, um Authentifizierung und rollenbasierte Datenzugriff zu implementieren. Wir haben einen integrierten Assistenten durchgeführt, um einen nutzenden Authentifizierungsdienst zu generieren. Dieser Dienst verwendet den Entity Framework Core, um auf eine Datenbank zuzugreifen. Eine .NET MAUI -Anwendung sendet Anfragen an den Web -API -Dienst, um Daten zu erhalten oder zu ändern.

Wenn Sie neu im Devexpress .NET App Security & Web API -Dienst sind, möchten Sie möglicherweise die folgenden Ressourcen überprüfen:
Erstellen Sie eine eigenständige Web -API -Anwendung
Eine 1-Klick-Lösung für die CRUD-Web-API mit einer rollenbasierten Zugriffskontrolle über EF Core & ASP.NET
SQL Server, wenn Sie diese Lösung unter Windows ausführen.
Führen Sie Visual Studio als Administrator aus und öffnen Sie die Lösung. Ermöglichen der Administratorberechtigte die IDE, eine Datenbank zu erstellen, wenn Sie das Web -Service -Projekt ausführen.
Wählen Sie im Dropdown-Menü Debug WebAPI . Diese Auswahl ermöglicht Kestrel als Webserver für Debugs.

Wenn Sie IIS Express Kestrel vorziehen, wählen Sie IIS Express im Dropdown-Menü Debugg . Verwenden Sie einen externen Texteditor, um den folgenden Code zu .vsMAUI_WebAPIconfigapplicationhost.config hinzuzufügen:
< sites >
< site name = " WebSite1 " id = " 1 " serverAutoStart = " true " >
<!-* ... -->
< bindings >
< binding protocol = " http " bindingInformation = " *:65201:* " />
< binding protocol = " https " bindingInformation = " *:44317:* " />
< binding protocol = " https " bindingInformation = " *:44317:localhost " />
< binding protocol = " http " bindingInformation = " *:65201:localhost " />
</ bindings >
</ site >
<!-* ... -->
</ sites > Klicken Sie mit der rechten Maustaste auf das MAUI -Projekt, wählen Sie Set as Startup Project und wählen Sie Ihren Emulator aus. Beachten Sie, dass physikalische Geräte, die über USB angehängt sind, nicht auf den Localhost Ihrer Maschine zugreifen können.
Klicken Sie mit der rechten Maustaste auf das WebAPI -Projekt und wählen Sie Debug > Start new instance .
Klicken Sie mit der rechten Maustaste auf das MAUI -Projekt und wählen Sie Debug > Start new instance .
Devexpress Web API Service verwendet JSON Web Tokens (JWT), um Benutzer zu autorisieren. Um ein Token zu erhalten, übergeben Sie Benutzername und Passwort an den authentifizierten Endpunkt. In diesem Beispiel wird die Token -Generation -Logik in der methode WebAPIService.RequestTokenAsync implementiert:
private async Task < HttpResponseMessage > RequestTokenAsync ( string userName , string password ) {
return await HttpClient . PostAsync ( $ " { ApiUrl } Authentication/Authenticate" ,
new StringContent ( JsonSerializer . Serialize ( new { userName , password = $ " { password } " } ) , Encoding . UTF8 ,
ApplicationJson ) ) ;
}Fügen Sie das Token in httpclient.defaultrequestheaders.authorisierung ein. Alle nachfolgenden Anfragen können dann auf private Endpunkte und Daten zugreifen:
HttpClient . DefaultRequestHeaders . Authorization = new AuthenticationHeaderValue ( "Bearer" , await tokenResponse . Content . ReadAsStringAsync ( ) ) ;Datei zu betrachten: webapiservice.cs
Wir haben die folgenden benutzerdefinierten Endpunkte im WebApi -Dienst implementiert:
Mit dem CandeletPost -Endpunkt können Sie eine Anforderung von einem mobilen Gerät an den Dienst senden und überprüfen, ob der aktuelle Benutzer Beiträge löschen kann. Auf diese Weise können Sie die Schaltfläche Löschen in der Benutzeroberfläche anzeigen/ausblenden.
Datei zu sehen: updater.cs
Der aktuelle Endpunkt gibt Informationen über den authentifizierten Benutzer zurück.
Datei zu sehen: updater.cs
Der GetAuthorimage -Endpunkt ruft ein Autorenbild nach Benutzer -ID ab.
Datei zu sehen: updater.cs
Der GetPostimage -Endpunkt ruft ein Bild nach Post -ID ab.
Datei zu sehen: updater.cs
Die Updater.UpdateDatabaseAfterUpdateSchema -Methode generiert Benutzer und gibt deren Anmeldeinformationen an. Sie können das Kennwort eines Benutzers direkt in der Datenbank ändern. Hinweis: Mit unserem plattformübergreifenden .NET-Anwendungs-Framework (XAF UI) können Sie schnell einen Desktop oder eine Web-Benutzeroberfläche erstellen, die auf die gleiche Datenbank zugreift.
Datei zu sehen: updater.cs
PermissionPolicyRole -Objekte in der Updater -Klasse geben Benutzerberechtigungen hin. Der folgende Code -Snippet ruft die AddObjectPermissionFromLambda der Methode aus, um die Rolle "Viewer" zu konfigurieren (dem Benutzer erlauben, veröffentlichte Beiträge zu lesen):
role . AddObjectPermissionFromLambda ( SecurityOperations . Read , p => p . IsPublished , SecurityPermissionState . Allow ) ;Datei zu sehen: updater.cs
Die AddTypePermissionsRecursively Methode verändert die Berechtigungen für die Rolle "Editor" (Alex, Antony und Dennis). Die Methode fügt CRUD -Berechtigungen hinzu (erstellen, lesen, aktualisieren, löschen) für den Post :
role . AddTypePermissionsRecursively < Post > ( SecurityOperations . Read | SecurityOperations . Write | SecurityOperations . Create | SecurityOperations . DeleteObject , SecurityPermissionState . Allow ) ;Datei zu sehen: updater.cs
Verwenden Sie textedit.starticon und passwordedit.
< dxe : TextEdit LabelText = " Login " StartIcon = " editorsname " .../>
< dxe : PasswordEdit LabelText = " Password " StartIcon = " editorspassword " .../>Datei zu sehen: loginpage.xaml
Um die Benutzereingabe in die Password -Steuerung zu validieren, verwenden Sie editbase.hasError und editbase.errortext ererbte Eigenschaften.
< dxe : PasswordEdit ... HasError = " {Binding HasError} " ErrorText = " {Binding ErrorText} " />Datei zu sehen: loginpage.xaml
public class LoginViewModel : BaseViewModel {
// ...
string errorText ;
bool hasError ;
// ...
public string ErrorText {
get => errorText ;
set => SetProperty ( ref errorText , value ) ;
}
public bool HasError {
get => hasError ;
set => SetProperty ( ref hasError , value ) ;
}
async void OnLoginClicked ( ) {
/// ...
string response = await DataStore . Authenticate ( userName , password ) ;
if ( ! string . IsNullOrEmpty ( response ) ) {
ErrorText = response ;
HasError = true ;
return ;
}
HasError = false ;
await Navigation . NavigateToAsync < SuccessViewModel > ( ) ;
}
}Datei zu betrachten: loginViewModel.cs
Geben Sie die geerbte Eigenschaft textedit.returnType an, um die Passwordit -Steuerung zu fokussieren, nachdem der Wert des textedit -Steuerelements bearbeitet wurde.
Verwenden Sie die Eigenschaft passwordit.returnCommand, um einen Befehl ( Login ) anzugeben, der ausgeführt wird, wenn ein Benutzer das Kennwort eingibt:
< dxe : PasswordEdit ReturnCommand = " {Binding LoginCommand} " />Datei zu sehen: loginpage.xaml
public class LoginViewModel : BaseViewModel {
// ...
public LoginViewModel ( ) {
LoginCommand = new Command ( OnLoginClicked ) ;
SignUpCommand = new Command ( OnSignUpClicked ) ;
PropertyChanged +=
( _ , __ ) => LoginCommand . ChangeCanExecute ( ) ;
}
// ...
public Command LoginCommand { get ; }
public Command SignUpCommand { get ; }
// ...
}Datei zu betrachten: loginViewModel.cs
Wir haben das Bild zwischen dem Bild in diesem Projekt aktiviert. Um dies zu erreichen, mussten wir Bilder nach ihrem URI identifizieren. Um eine URI zu erstellen, verwenden wir ein Multibinding, das den Hostnamen und den Autor/Post -ID erhält. Weitere Informationen zum Bild zwischen Bild finden Sie unter Maui -Dokumentation.
< dx : DXImage >
< dx : DXImage .Source>
< MultiBinding StringFormat = " {}{0}PublicEndpoint/PostImage/{1} " >
< Binding Source = " {x:Static webService:WebAPIService.ApiUrl} " />
< Binding Path = " PostId " />
</ MultiBinding >
</ dx : DXImage .Source>
</ dx : DXImage >Datei zu sehen: itemsPage.xaml
Android Emulator und iOS Simulator fordern ein Zertifikat an, um über HTTPS auf einen Dienst zuzugreifen. In diesem Beispiel wechseln wir im Debug -Modus zu HTTP:
#if ! DEBUG
app . UseHttpsRedirection ( ) ;
#endif< network-security-config >
< domain-config cleartextTrafficPermitted = " true " >
< domain includeSubdomains = " true " >10.0.2.2</ domain >
</ domain-config >
</ network-security-config >< key >NSAppTransportSecurity</ key >
< dict >
< key >NSAllowsLocalNetworking</ key >
< true />
</ dict >Auf diese Weise können Sie die Zertifikatsprüfung umgehen, ohne ein Entwicklungszertifikat zu erstellen oder HTTPCLIENT -Handler zu implementieren.
Weitere Informationen finden Sie unter Verbindung zu lokalen Webdiensten von Android Emulatoren und iOS -Simulatoren.
Wir empfehlen Ihnen, HTTP nur zu verwenden, wenn Sie Ihre Anwendung entwickeln/debuggen. Verwenden Sie in der Produktion HTTPS aus Sicherheitsgründen.
(Sie werden nach devexpress.com weitergeleitet, um Ihre Antwort einzureichen.)