В этом примере используется наша бесплатная служба безопасности и веб-API .NET для реализации аутентификации и доступа на основе ролей. Мы запустили встроенный волшебник, чтобы создать готовую к использованию сервис аутентификации. Эта служба использует ядро Ontity Framework для доступа к базе данных. Приложение .NET MAUI отправляет запросы в службу веб -API для получения или изменения данных.

Если вы новичок в службе DeVexPress .Net App Security & Web API, вы можете просмотреть следующие ресурсы:
Создать автономное приложение Web API
Решение 1 класса для веб-API CRUD с контролем доступа на основе ролей через EF Core & ASP.NET
SQL Server, если вы запустите это решение в Windows.
Запустите Visual Studio в качестве администратора и откройте решение. Привилегии администратора позволяют IDE создавать базу данных при запуске проекта веб -службы.
Выберите WebAPI в раскрывающемся меню отладки. Этот выбор позволяет Kestrel в качестве веб -сервера для отладки.

Если вы предпочитаете IIS Express для Kestrel, выберите IIS Express в раскрывающемся меню отладки. Используйте внешний текстовый редактор, чтобы добавить следующий код в .vsMAUI_WebAPIconfigapplicationhost.config
< 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 > Щелкните правой кнопкой мыши проект MAUI , выберите Set as Startup Project и выберите свой эмулятор. Обратите внимание, что физические устройства, которые прикрепляются к USB, не могут получить доступ к локальному хосту вашей машины.
Щелкните правой кнопкой мыши проект WebAPI и выберите Debug > Start new instance .
Щелкните правой кнопкой мыши проект MAUI и выберите Debug > Start new instance .
DeVexPress Web API Service использует JSON Web Tokens (JWT) для авторизации пользователей. Чтобы получить токен, передайте имя пользователя и пароль в конечную точку Authenticate . В этом примере логика генерации токена реализована в методе WebAPIService.RequestTokenAsync :
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 ) ) ;
}Включите токен в httpclient.defaultrequestheaders.authorization. Все последующие запросы могут затем получить доступ к частным конечным точкам и данным:
HttpClient . DefaultRequestHeaders . Authorization = new AuthenticationHeaderValue ( "Bearer" , await tokenResponse . Content . ReadAsStringAsync ( ) ) ;Файл для просмотра: webApiservice.cs
Мы внедрили следующие пользовательские конечные точки в службе WebApi :
Конечная точка Candeletepost позволяет отправлять запрос с мобильного устройства на службу и проверить, может ли текущий пользователь удалять сообщения. Это позволяет вам показать/скрыть кнопку удаления в пользовательском интерфейсе.
Файл для просмотра: Updater.cs
Конечная точка CurrentUser возвращает информацию об аутентифицированном пользователе.
Файл для просмотра: Updater.cs
Конечная точка GetAuthorimage получает изображение автора от идентификатора пользователя.
Файл для просмотра: Updater.cs
Конечная точка GetPostimage извлекает изображение от Post Id.
Файл для просмотра: Updater.cs
Метод Updater.UpdateDatabaseAfterUpdateSchema генерирует пользователей и определяет их учетные данные. Вы можете изменить пароль пользователя непосредственно в базе данных. ПРИМЕЧАНИЕ. Наша кроссплатформенная платформа приложения (xaf UI) позволяет быстро создавать настольный или веб-интерфейс, который обращается к той же базе данных.
Файл для просмотра: Updater.cs
Объекты PermissionPolicyRole в классе Updater добавить разрешения пользователя. Следующий фрагмент кода вызывает метод AddObjectPermissionFromLambda для настройки роли «просмотра» (позволяйте пользователю читать опубликованные сообщения):
role . AddObjectPermissionFromLambda ( SecurityOperations . Read , p => p . IsPublished , SecurityPermissionState . Allow ) ;Файл для просмотра: Updater.cs
Метод AddTypePermissionsRecursively изменяет привилегии для роли «редактора» (Алекс, Антоний и Деннис). Метод добавляет разрешения CRUD (создать, прочитать, обновить, удалить) для типа Post :
role . AddTypePermissionsRecursively < Post > ( SecurityOperations . Read | SecurityOperations . Write | SecurityOperations . Create | SecurityOperations . DeleteObject , SecurityPermissionState . Allow ) ;Файл для просмотра: Updater.cs
Используйте TextEdit.Starticon и PasswordEdit.Starticon Properties для отображения значков в элементах управления TextEdit и Passwordit.
< dxe : TextEdit LabelText = " Login " StartIcon = " editorsname " .../>
< dxe : PasswordEdit LabelText = " Password " StartIcon = " editorspassword " .../>Файл для просмотра: loginpage.xaml
Чтобы проверить пользовательский ввод в управлении паролем, используйте editbase.haserror и editbase.errortext Унаследованные свойства.
< dxe : PasswordEdit ... HasError = " {Binding HasError} " ErrorText = " {Binding ErrorText} " />Файл для просмотра: 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 > ( ) ;
}
}Файл для просмотра: LoginViewModel.cs
Укажите унаследованное свойство TextEdit.returntype, чтобы сосредоточить управление паролем после отредактирования значения управления Textedit.
Используйте свойство passwordEntit.returnCommand, чтобы указать команду ( вход в систему ), которая работает, когда пользователь входит в пароль:
< dxe : PasswordEdit ReturnCommand = " {Binding LoginCommand} " />Файл для просмотра: 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 ; }
// ...
}Файл для просмотра: LoginViewModel.cs
Мы включили кэширование изображения в этом проекте. Чтобы достичь этого, нам нужно было определить изображения по их URI. Чтобы создать URI, мы используем многобингирование, которое получает имя хоста и идентификатор автора/публикации. Для получения дополнительной информации о кэшировании изображения см. В документации Maui.
< 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 >Файл для просмотра: itempage.xaml
Эмулятор Android и симулятор iOS запрашивают сертификат для доступа к сервису через HTTPS. В этом примере мы переключаемся на 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 >Это позволяет вам обойти проверку сертификата без необходимости создания сертификата разработки или реализации обработчиков HTTPClient.
Для получения дополнительной информации, пожалуйста, обратитесь к подключению к локальным веб -службам от эмуляторов Android и симуляторах iOS.
Мы рекомендуем использовать HTTP только при разработке/отладке вашего приложения. В производстве используйте HTTPS по соображениям безопасности.
(Вы будете перенаправлены на devexpress.com, чтобы отправить свой ответ)