我有一个ServerEventsClient,当服务器引发一个事件时会收到通知。 服务器具有可用的自定义CredentialsAuthProvider实现。
这是启动客户端的代码(我在服务器上自定义URL):
int port = 4711;
string baseMessagingUrl = "http://localhost:{0}/messaging".Fmt(port);
string authorizationUrl = "http://localhost:{0}/api/auth/login".Fmt(port);
string channel = "customer/4711";
var client = new ServerEventsClient(baseMessagingUrl, channel);
client.RegisterNamedReceiver<CcuEventReceiver>("ccu");
client.ServiceClient.Post<AuthenticateResponse>(authorizationUrl, new Authenticate
{
provider = CredentialsAuthProvider.Name,
UserName = "fred",
Password = "123",
RememberMe = true,
});
client.Start();
在服务器上:在发送消息之前,我通过
检查订阅详情List<Dictionary<string, string>> subscriptionsDetails = _serverEvents.GetSubscriptionsDetails(changeEvent.CustomerId);
它们不包含我在授权期间发送的预期身份验证详细信息,但是:
"userId": -6
"displayName": user6
"profileUrl": a url to githubusercontent
“OnConnect”事件(ServerEventsFeature)中的相同信息。
如何确保只有经过身份验证的客户才能订阅活动?
答案 0 :(得分:1)
ServerEventsClient
对Authenticate
进行身份验证的支持已added in this commit, v4.0.32 + 即now on MyGet。
有新的显式AuthenticateAsync
和client.Authenticate(new Authenticate {
provider = CredentialsAuthProvider.Name,
UserName = "fred",
Password = "123",
RememberMe = true,
});
client.Start();
API可用于验证ServerEvents ServiceClient现在与Cookie共享与连接到事件流的WebRequest,所以您现在可以通过以下方式进行身份验证:
ServerEventsClient
这些API只是public static AuthenticateResponse Authenticate(this ServerEventsClient client,
Authenticate request)
{
return client.ServiceClient.Post(request);
}
上的扩展方法,因此如果您想要自定义行为,可以轻松扩展:
LimitToAuthenticatedUsers
ServerEventsFeature
中还有一个新的Plugins.Add(new ServerEventsFeature {
LimitToAuthenticatedUsers = true,
});
选项,用于限制对经过身份验证的客户端的访问:
401 Unauthorized
启用后,将为未经身份验证的客户端返回{{1}}。