authentication - 使用 gRPC 实现用户身份验证
问题描述
我正在寻找使用我的dart gRPC 服务器 + 客户端实现简单的用户身份验证,并且正在努力寻找有关如何正确实现此目的的示例。
所以我的问题如下:
- 如何将用户身份验证数据 (JWT) 添加到需要在客户端进行身份验证的 API 调用?
- 如何在服务器上处理这些数据?
我假设在客户端上,元数据是要走的路,但是有没有办法为每次调用自动添加身份验证数据?
对于服务器,我假设拦截器是要走的路,但是如何仅为特定服务指定拦截器(因为并非所有 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);
};
}
}
推荐阅读
- javascript - Javascript隐藏和显示div以输入密码
- wordpress - 从 Wordpress 中博客文章的永久链接 URL 中删除子类别的问题
- apache-spark - Zeppelin 是否可以限制用户创建笔记?
- postgresql - 为什么我得到一个 org.springframework.orm.jpa.JpaSystemException 而不是一个 DataIntegrityException 用于休眠弹簧启动?
- python - 删除 tkinter 树视图中的未知列
- rest - 实现对 kotlin 数据类的更新
- reactjs - 在 React 中通过 onError 设置图像源时如何防止无限循环?
- ruby - 使文字在终端中的 ruby on 中实时移动
- c# - C# Razor 查询 - 使用 Umbraco V7,如何检查当前页面是否作为子项存在于任何 1 级内容树节点中?
- passwords - 如何在没有消费者密码或共享客户端秘密的情况下验证机密的 Keycloak 客户端 API 消费者?