Пользовательский запрос аутентификации в ServiceStack для мультитенантности
Я уже использую пользовательский провайдер аутентификации в своем приложении веб-сервисов на основе ServiceStack.
Я переопределяю метод Authenticate и проверяю моего пользователя по одной из нескольких базовых баз данных клиентов. В настоящее время я определяю базу данных арендаторов, сопоставляя ключ API со строкой базы данных.
public override object Authenticate(
IServiceBase authService,
IAuthSession session,
Auth request) // <- custom object here, MyCustomAuth request
{
// ...
}
Это работает, когда каждое приложение предназначено для одного арендатора (арендатор / клиент может создать свое собственное приложение и использовать этот ключ API). В будущем я хочу создать мультитенантное мобильное приложение. Таким образом, метод API-ключа не может быть использован, потому что я не могу ожидать, что каждый пользователь будет набирать его, поэтому я не могу определить, какой арендатор использует приложение.
Я хотел изменить объект Auth, чтобы я мог включить TenantId (предоставленный пользователем при входе в систему). Тем не менее, я не вижу, как я могу настроить этот объект.
Есть ли способ настроить этот объект Auth или мне нужно найти альтернативное решение?
1 ответ
Вы не можете изменить встроенный Authenticate
Запрос DTO используется, но вы можете использовать его Dictionary<string, string> Meta
свойство для отправки дополнительных метаданных с запросом аутентификации, например:
client.Post(new Authenticate {
...
Meta = new Dictionary<string,string> {
{"TenantId", tenantId},
}
}
В качестве альтернативы вы можете отправить дополнительную информацию в заголовках QueryString или HTTP и получить доступ к IRequest
с:
var tenantId = authService.Request.QueryString["TenantId"];