我正在寻找使用我的dart gRPC 服务器 + 客户端实现简单的用户身份验证,并且正在努力寻找有关如何正确实现此目的的示例。
所以我的问题如下:
- 如何将用户身份验证数据 (JWT) 添加到需要在客户端进行身份验证的 API 调用?
- 如何在服务器上处理这些数据?
我假设在客户端上,元数据是要走的路,但是有没有办法为每次调用自动添加身份验证数据?
对于服务器,我假设拦截器是要走的路,但是如何仅为特定服务指定拦截器(因为并非所有 API 调用都需要身份验证)?
我正在寻找使用我的dart gRPC 服务器 + 客户端实现简单的用户身份验证,并且正在努力寻找有关如何正确实现此目的的示例。
所以我的问题如下:
我假设在客户端上,元数据是要走的路,但是有没有办法为每次调用自动添加身份验证数据?
对于服务器,我假设拦截器是要走的路,但是如何仅为特定服务指定拦截器(因为并非所有 API 调用都需要身份验证)?
有没有办法为每次通话自动添加身份验证数据?
您可以在生成的客户端构造函数中提供带有参数的默认CallOptions 。options
您可以使用它为所有呼叫添加授权信息。如果您需要为每个调用执行异步工作(例如,检查令牌是否仍然有效并可选择刷新它),您可以添加一个MetadataProvider,它会为每个调用调用。
如何仅为特定服务指定拦截器(因为并非所有 API 调用都需要身份验证)?
拦截器可以访问包含名称的ServiceMethod 。因此,您可以检查是否仅在某些方法上调用拦截器:
extension OnlyInterceptSome on Interceptor {
Interceptor limitTo(Set<String> endpoints) {
return (call, method) {
// Skip the check if we don't care about the method.
if (!endpoints.contains(method.name)) return null;
// Invoke the regular interceptor otherwise
return this(call, method);
};
}
}