问题标签 [jwt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3656 浏览

asp.net-web-api - 使用带有委托的 JWT 令牌 (ActAs)

我有一个使用 WIF 和 .NET 4.5 实现的基于声明的身份验证系统的工作实现。它包含通常的部分:

  • 具有被动和主动端点的自定义 STS
  • 后端 WCF 服务
  • 前端 MVC 应用程序
  • 前端 WebApi 应用程序

从前端应用程序到后端 WCF 服务的调用使用委托身份验证,因此用户在前端应用程序中进行身份验证,应用程序使用 ActAs=BootstrapToken 请求新令牌,然后调用 WCF 服务。

这一切都与 SAML 令牌一起正常工作。

现在我想使用 JWT 令牌与 WebApi 对话,因此我在我的 STS 和 WebApi 项目中安装了 Microsoft .Net Framework 4.5 Nuget 包的 JSON Web 令牌处理程序。

所以我让我的 STS 正确地发出签名的 JWT 令牌,而我的 WebApi 依赖方验证了相同的令牌。一切都好。

问题:

如果我在我的 RST 的 ActAs 字段中使用 JWT 令牌,它将在没有签名的情况下发送,因此它自然会被 STS 拒绝。似乎 SecurityTokenHandler.ReadToken() 方法返回的令牌返回一个没有任何签名信息的令牌。

现在我的困境是:这是 JWT 令牌支持的场景吗?据我了解,与 SAML 令牌相反,JWT 令牌不携带验证签名的所有信息,那么还有其他限制吗?

另一方面,如果确实支持,那么之前是否有人实施过,或者有什么想法?这是开发人员预览版,所以它可能是一个错误吗?

编辑

这是说明问题的示例。该代码在 STS(可以访问签名密钥)和依赖方(可以访问证书的公钥)中运行时产生相同的结果:

产生以下

因此,很明显,读/写往返会丢失签名信息。我可以理解为什么这会发生在 RP 中,但不会发生在 STS 中。

编辑 2

所以这是当前的JWTSecurityTokenHandler.WriteToken(SecurityToken token)实现:

通过研究,很明显,写入的令牌在 RP 中永远不会有其签名,因为我们没有签名凭证。所以这看起来不像是一个错误,而是一个实施决定。我只是不明白为什么。

谢谢

0 投票
1 回答
1542 浏览

oauth-2.0 - Force.com Apex 代码生成 Google API oAuth 2.0 JWT

我正在尝试在 Force.com 上的 Apex 中生成 JWT,但不断收到 400“错误”:“invalid_grant”。我尝试了许多变体,但无法得到有效的响应。我的clientEmailAddress 是正确的(例如##@developer.gserviceaccount.com)。我使用 openSSL 提取了我的私钥的值。我根据板上的其他帖子编写了一个 base64URL 编码的方法。任何帮助将不胜感激。

0 投票
11 回答
23790 浏览

php - “权限不足”谷歌分析 API 服务帐号

我正在尝试通过服务帐户使用 Google Analytics API 获取数据。

我一直在搜索 stackoverflow 如何做到这一点,并使用在几篇文章中找到的完全相同的代码,但遇到问题才能使其正常工作。

资料来源:

服务应用程序和 Google Analytics API V3:服务器到服务器 OAuth2 身份验证?

服务应用程序和 Google Analytics API V3:错误 101 (net::ERR_CONNECTION_RESET)

http://code.google.com/p/google-api-php-client/source/browse/trunk/examples/prediction/serviceAccount.php

这就是我得到的:

执行时出现以下错误:

致命错误:未捕获的异常“Google_ServiceException”和消息“调用 GET 时出错” https://www.googleapis.com/analytics/v3/data/ga?ids=ga%3Axxxx7777&start-date=2012-01-01&end-date=2013- 01-25&metrics=ga%3Apageviews: (403) 用户对此配置文件没有足够的权限。' 在 /Applications/XAMPP/xamppfiles/htdocs/insights/application/libraries/googleAPI/io/Google_REST.php:66 堆栈跟踪:#0 /Applications/XAMPP/xamppfiles/htdocs/insights/application/libraries/googleAPI/io/Google_REST .php(36): Google_REST::decodeHttpResponse(Object(Google_HttpRequest)) #1 /Applications/XAMPP/xamppfiles/htdocs/insights/application/libraries/googleAPI/service/Google_ServiceResource.php(178): Google_REST::execute(Object (Google_HttpRequest)) #2 /Applications/XAMPP/xamppfiles/htdocs/insights/application/libraries/googleAPI/contrib/Google_AnalyticsService.php(383): Google_ServiceResource->__call('get', Array) #3 /Applications/XAMPP/ xamppfiles/htdocs/insights/application/libraries/Google.php(46): Google_DataGaServiceResource->get('

因为我使用与工作示例完全相同的代码,我认为这可能是 API 或服务帐户设置的问题?

这是我添加到分析帐户的用户: 分析用户

这是 api 访问帐户: api访问

有人知道我在做什么错吗?

0 投票
5 回答
27562 浏览

.net - 如何使用对称密钥配置 Microsoft JWT?

我正在尝试将我的 ASP.NET 应用程序配置为接受使用对称密钥签名的 JSON Web 令牌 (JWT)。STS 无法为此使用证书,因此我们正在使用它们的对称密钥支持。

最后,我使用的是Microsoft 的 JWT Developer Preview。不幸的是,我还没有看到任何关于如何将其与对称密钥一起使用的示例。在使用各种工具进行了一些挖掘之后,我发现NamedKeyIssuerTokenResolver并发现我可以将其配置为使用对称密钥。例如:

我不完全确定我应该在那里使用什么name。应该是受众Uri,还是发行者Uri?无论如何,我知道如果我不包含 a name,我的程序启动时会出现异常,因为该securityKey元素需要该属性。

不管怎样,这仍然不能解决问题。对 STS 进行身份验证后,出现以下异常:

我是否缺少其他一些配置步骤?我在name属性中放错东西了吗?或者这是 JWT 开发者预览版中的一个已知错误?

0 投票
1 回答
1145 浏览

c# - 用于 Azure 移动服务 (REST) 的 Live Connect 身份验证令牌

我有一个简单的 Windows 窗体应用程序来尝试 Live Connect 和 Azure 移动服务。不是 Windows 8 现代应用程序。

我正在尝试为 Live Connect 使用一些示例代码,并且已经能够让登录部分正常工作。最后,我在登录后得到一个 access_token。

在同一个 Windows 窗体应用程序的移动服务端,我正在尝试使用 REST 登录。但是,我似乎收到“401 Unauthorized”响应,因为“身份验证令牌的签名格式错误或由不同的密钥签名”

JWT 似乎有两个 '.' 在令牌中。SWT 似乎有 '/'、'+' 和 '='

我需要进行转换吗?

有没有办法配置 Live Connect,以便返回的身份验证令牌是 JWT(或任何移动服务期望的)?

我已经检查了 Live Connect 和移动服务上的客户端密码,它们是正确的。

0 投票
1 回答
2104 浏览

clojure - “错误”:“invalid_token:无法解析身份验证令牌。” 在 Clojure 中为 Firebase 生成 JWT 时

尝试围绕 Firebase REST API 编写一个包装器(请参阅https://github.com/cloudfuji/taika以获取完整源代码),并且身份验证令牌似乎失败了。这些函数是 Firebase 提供的 Java 库选项 ( https://github.com/firebase/firebase-token-generator-java )的简单包装器

代码很简单:

生成令牌,看起来很合理(例如密钥,当然):

但是在 REST API 请求中使用令牌时,它会失败并显示:

ruby 库似乎没有同样的问题。

同样,完整的源代码位于https://github.com/cloudfuji/taika/blob/master/src/taika/auth.clj

0 投票
1 回答
4830 浏览

.net - 如何从 .p12 文件中提取私钥字符串?

我正在尝试从 VB.NET 服务器应用程序访问 Google Analytics API。我的应用程序属于“服务帐户”应用程序的类别,因此我没有向用户请求凭据——该应用程序有自己的凭据,它用于从 Google 检索数据以显示给用户。

服务帐户 OAuth2 工作流程要求应用程序生成 JWT(JSON Web 令牌)作为对自身进行身份验证的一种方式。我找到了一个 .NET 库来生成这些令牌,但我对给这个库提供哪个“键”有点困惑。在库的文档中,给出的示例键是一个 base-64 外观的数字和大写和小写字母字符串。但我拥有的是一个.p12私钥文件和相应的密码。如何从该密钥文件中提取某种文本密钥?

我试图做类似的事情

但这给我留下了一个字节数组,而不是一个字符串。我在正确的轨道上吗?

0 投票
1 回答
2900 浏览

security - 验证使用 JSON Web 加密 (JWE) 加密的安全令牌的颁发者?

我一直在阅读 JSON Web 加密 (JWE) 规范,最新的草案是 08,因为我们正在考虑在我们的身份验证服务器中支持 JSON Web 令牌 (JWT)。

使用它定义的非对称加密方法,对称密钥(内容主密钥)使用收件人公钥进行加密。这是有道理的,因此只有接收者才能解密它,并确保令牌是为他们准备的。

通常我还希望看到一些可以证明令牌来自谁的东西,例如使用发行者的私钥创建的签名,可以使用他们的公钥进行验证。但是,签名似乎也来自内容主密钥或接收者的公钥,没有提及发行者的私钥。

如果没有这个,在我看来——只要知道预期的令牌格式——任何拥有接收者公钥的人(即任何人)都可以生成一个有效的令牌;不仅仅是受信任的身份验证服务器。

我不是密码学专家(远非如此),所以我确定我在这里遗漏了一些东西。接收方如何验证非对称加密令牌是否来自受信任的发行者?

鉴于 JSON Web 签名 (JWS) 规范确实定义了使用颁发者的私钥并且可以使用其公钥进行验证的签名,我想知道这个想法是否是 JWE 令牌的有效负载应该是 JWS 令牌?

0 投票
2 回答
4024 浏览

php - Firebase PHP-API 安装

为了验证用户的 firebase 我想使用https://github.com/firebase/firebase-token-generator-php这取决于https://github.com/firebase/php-jwt 但是如何安装?我已经分别检查了 'libs/firebase-token-generator-php' 和 'libs/php-jwt' 中的两个资源

问题:“firebase-token-generator-php”使用include_once 'JWT.php';它既不在同一个文件夹中,也不在我的包含路径中。

如果我可以为此使用作曲家,那真的会更容易。

0 投票
0 回答
160 浏览

connect - 如何在 Live Connect 中使用“限制 Windows 8 应用程序的 JWT 发布选项”?

根据 http://msdn.microsoft.com/en-us/library/live/hh826544.aspx#restrict_jwt上的描述,我仍然不知道如何使用此功能。我的理解是:

  1. 我需要创建两个 win8 应用程序。例如,AppA 和 AppB

  2. 在配置您的应用程序中使用 Live 服务配置它们。

  3. 仅使用重定向 Uri 指定一个应用程序。例如,将“url://appA”指定为 AppA 的重定向 Uri。

  4. 确保两个 win8 应用的“Restrict JWT Issuing”选项都设置为“No”

  5. 对于 AppB,使用来自 AppA 的重定向 Uri 来初始化 LiveAuthClient 对象: var authClient = new LiveAuthClient("url://appA"); 之后,从 Live connect 到 AppB 的身份验证令牌应该能够被 AppA 的客户端密码解析。但事实证明,认证失败,没有返回认证令牌。

有人可以帮助指出我的理解是否正确。提前致谢。