我正在进行一个项目,我们将在微服务架构中使用不同的服务,我们还希望使用一些Firebase服务。我正在开发一个身份验证服务器,它将铸造定制的JWT,用于Firebase和其他应用编程接口项目。
我们希望使用Firebase Auth SDK轻松与FB、谷歌、Twitter等集成,但我们需要用更多数据丰富用户的令牌。因此,我的思维过程是创建一个节点。使用Firebase Admin SDK执行此操作的JS auth服务器。流程如下:
1-3步很好。当尝试在其他服务上验证自定义令牌时,会出现问题。
TL;博士:这里有两个问题:
首先,我怀疑核实它的正确方法。(请原谅,我没有创建OAuth流的经验。)使用的算法是RS256,所以我应该能够使用公钥验证令牌。在我看来,有两种方法可以获得这把钥匙:
https://securetoken。谷歌。com/[PROJECT ID]/。众所周知的/openid配置
检索正确的孩子
(密钥ID)的指数和模,并从中创建公钥。
通过执行以下操作从admin SDK生成的令牌
admin.auth().createCustomToken(uid, additionalClaims).then(function(customToken)
对于一些自定义声明,如下所示:
标题:
{
"alg": "RS256",
"typ": "JWT"
}
有效载荷:
{
"claims": {
"premiumAccount": true,
"someRandomInnerObject": {
"something": "somethingRandom"
}
},
"uid": "<uid for the user>",
"iat": 1488454663,
"exp": 1488458263,
"aud": "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
"iss": "firebase-adminsdk-le7ge@<PROJECT ID>.iam.gserviceaccount.com",
"sub": "firebase-adminsdk-le7ge@<PROJECT ID>.iam.gserviceaccount.com"
}
不过,我似乎无法让方法2奏效。一个问题是生成的令牌没有子
头,因此不符合OpenID规范(AFAIK),这导致以下两个选项之一:
2号的问题:
我做后者的方式是这样的(以下是关于这个主题的博客指南):
>
使用lib生成公钥(来自mod exp的rsa pem)
使用密钥验证使用'官方'jwt库
上述操作会产生公钥:
-----开始RSA公钥---MIIBCgKCAQEAxXpo7ChLMnv1QTovmm9DkAnYgINO1WFBWGAVRt93ajftPpVNcxMT MAQI4Jf06OxFCQib94GyHxKDNOYiweVrHVYH9j/STF xbQwiPF/8L7 haC2WXMl2 TKTGMSLVEWWWWWWWF4COQV29OVCQWECBCAYCWVDDM1YKYKDRK0YOUL0YOYOKQ1GDCUUL/JHAFFZN6C8WPVI2YDHCHICH04BCBJ0BZGNK2KKKKZKKKK6rrIFGfHpcv8mWG1Awsu5qs33aFu1Qx/4LdMAuEsvX9f EmFZCUS8 trilqJbcsd/AQ9eOZLAB0BdKwIDAQAB------结束RSA公钥-----
有两件事似乎不对。一是密钥与我可以从私钥中提取的密钥不同。另一个问题是,我从私钥中提取的一个有以下注释:
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
没有“RSA”。这有关系吗?无论如何,它都无法验证。
最后,我是否完全误解了OpenID流?JWK是由私钥生成的,我也需要私钥来验证我的JWT吗?我是否应该在auth服务器上公开我自己的JWK,以便其他服务联系和使用,而不是谷歌的?我有点困惑Firebase Admin SDK做什么和不做什么,我想:-)
我知道这是很多问题,但我认为它们都有联系。
我在研究中依赖的一些资源(当然除了官方的管理sdk文档):
在使用自定义令牌重新验证Firebase客户端SDK之后,客户端实际上会使用自定义令牌中的声明生成一个新的ID令牌。您应该使用此ID令牌来验证向不同微服务发出的请求(此处有文档记录)。所以,是的,您的原始ID令牌将被丢弃,但会在其位置创建一个新的ID令牌。该ID令牌将每小时自动刷新一次。所以,你应该可以直接调用用户。getToken()
在需要时获取有效的ID令牌。该方法代表您处理所有缓存。
我正在开发一个具有自己的身份验证和授权机制的REST应用程序。我想使用JSON Web Tokens进行身份验证。以下是有效且安全的实现吗? < li >将开发一个REST API来接受用户名和密码并进行认证。要使用的HTTP方法是POST,因此没有缓存。此外,在传输时还会有安全SSL < li >在认证时,将创建两个JWTs访问令牌和刷新令牌。刷新令牌将具有更长的有效期。这两个令牌都将写入coo
我想用jwt流实现DocuSign服务集成身份验证。 我已经生成了有效的jwt(在jwt.io上验证),并且我可以根据https://docs.docusign.com/esign/guide/authentication/oa2_jwt.html#requesting-访问令牌 我在这篇博文中发现:https://www.docusign.com/blog/dsdev-docusign-deve
它总是导致带有错误消息的catch块 登录失败:未知的用户名或错误的密码。失败:未知的用户名或错误的密码。 我确信给定的密码是正确的。 如何使用给定的密码验证用户名?
在auth-routes示例中,api和nuxt一起启动并使用一个Node.js服务器实例。但是,有时我们应该使用jsonWebToken处理外部api身份验证问题。在这个例子中,将用最简单的方式解释。 官方 auth-module 如果要实现复杂的身份验证流程,例如OAuth2,我们建议使用官方 auth-module 结构 由于Nuxt.js同时提供服务器和客户端呈现,并且浏览器的cookie
我正在使用预装的Visual Studio解决方案开发我的首批OAuth解决方案之一。 不过,同时我也希望我的服务器应用程序拥有“完全访问权限”。他们需要能够获得列表增加多个用户,删除东西等等。 下面是我的问题,我认为这些问题可以很容易地一起回答: 如何管理两个短期令牌(承载令牌?)连同永久令牌(API令牌?) 我在访问级别上有何不同,因此某些方法需要永久令牌? 在同一方法中,我在访问级别上有何不
我必须说,我对整个模型非常困惑,我需要帮助把所有的浮动件粘在一起。 我不是在做Spring REST,只是简单的WebMVC控制器。 什么让人困惑?(错误之处请指正) 第三方身份验证 要针对第三方进行身份验证,我需要通过扩展AuthenticationProvider来拥有自定义提供程序 null 问题: 何时调用AbstractAuthenticationProcessingFilter#Suc