问题标签 [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 投票
1 回答
2423 浏览

asp.net-web-api - Asp.Net Web Api:使用令牌进行保护?

我想用令牌保护一个 asp.net web api 服务。现在我知道您通常会实现 STS 服务器,但我不想这样做,所以我的其他选择是什么。

我正在考虑让控制器不受保护,客户端可以调用传入用户名和密码,这将返回一个令牌,然后该令牌将用于并且需要调用服务上的其他控制器,这些控制器将受到保护。

所以这带来了一些问题,使用 DelegatingHandler 与 AuthorizeAttribute。上面的选项必须是一个 authorizeAttribute 因为我需要让控制器不受保护,以便客户端调用身份验证。我不知道如何使用委托处理程序从技术上保护整个服务,而不是让 1 个控制器不受保护。

我看到的另一个选项是提供另一个服务以允许客户端进行身份验证并获取令牌,然后我可以使用委托处理程序锁定我的第二个服务。

让我们想象一下,我走的是 STS 路由,我仍然需要提供某种方式客户端可以联系“OPEN”服务/控制器,该服务/控制器反过来会调用 STS 以获取令牌。

所以考虑到这一点,另一项服务是我最好的选择吗?

0 投票
1 回答
210 浏览

oauth - JWT 与 OAuth 有什么关系?

我最近偶然发现了 JSON Web Tokens (JWT),据我了解,它们只是一种紧凑形式的令牌,可以轻松序列化(因为它是 JSON)。

现在,我的问题是:JWT 是否以任何形式与 OAuth 相关,或者它们是两个完全独立的概念?

0 投票
0 回答
460 浏览

wif - .NET 4.5 的 JWT 处理程序抛出错误:不支持带有单个参数的 GetIssuerName

我刚刚为此处描述的 .Net 4.5 库实现了这个 JSON Web 令牌处理程序:

http://www.cloudidentity.com/blog/2012/11/20/introducing-the-developer-preview-of-the-json-web-token-handler-for-the-microsoft-net-framework-4- 5-2/

我有一个应该向我的应用程序返回 JWT 令牌的 ACS 服务。但是,当我应该将令牌返回到我的应用程序时(当浏览器重定向到我的依赖方的返回 uri 时),我得到了这个异常:

WIF10200:不支持带有单个参数的 GetIssuerName。调用:'GetIssuerName(SecurityToken securityToken, string issuer)'。

我认为这不是我的代码直接的问题;因为如果我进行解决方案范围的搜索,“GetIssuerName”不在我的解决方案中。我认为这可能与 WIF 想要信任的证书颁发者有关,但我已按照上面链接的文章中的说明从 ACS 站点的 FederationMetadata 导入证书......我对此完全感到困惑一。

奇怪的是,当我将我的依赖方令牌类型从 JWT 更改为 SAML 1 或 2 时,我的依赖方的 Return Uri 永远不会被命中,我只是被无误地重定向回我的领域。我希望最终能降落在我的 Return Uri 上。如果有人可以向我解释这两种现象,那将有很大帮助!

更新

.NET 4.5 中的 GetIssuerName 方法是 System.IdentityModel.Tokens.ValidatingIssuerNameRegistry 类的一部分(还有一个具有相同方法的 System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry 类,但这不是我正在使用的方法)。

通过查看元数据,类中有 2 个具有此名称的重写方法:

我从 WIF 得到的错误似乎直接来自那里列出的第一个方法,正如您从下面的堆栈跟踪中看到的那样。随着我的依赖方返回 JWT,某个地方应该调用第二个方法,其签名有第二个参数,但调用的是第一个。我希望我知道如何改变它。

[NotSupportedException:WIF10200:不支持带有单个参数的 GetIssuerName。调用:'GetIssuerName(SecurityToken securityToken, string issuer)'。]
System.IdentityModel.Tokens.ValidatingIssuerNameRegistry.GetIssuerName(SecurityToken securityToken) +156
Microsoft.IdentityModel.Tokens.JWT.JWTSecurityTokenHandler.ValidateIssuer(JWTSecurityToken jwt, TokenValidationParameters validationParameters) +1303
Microsoft .IdentityModel.Tokens.JWT.JWTSecurityTokenHandler.ValidateToken(JWTSecurityToken jwt, TokenValidationParameters 验证参数) +278
Microsoft.IdentityModel.Tokens.JWT.JWTSecurityTokenHandler.ValidateToken(SecurityToken token) +2248
System.IdentityModel.Tokens.SecurityTokenHandlerCollection.ValidateToken(SecurityToken token) +135
System.IdentityModel.Services.TokenReceiver.AuthenticateToken(SecurityToken token, Boolean ensureBearerToken, String endpointUri) +502
System.IdentityModel.Services.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequestBase request) + 1508
System.IdentityModel.Services.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args) +700
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&同步完成)+165

0 投票
2 回答
2679 浏览

authentication - 如何将 JSON Web 令牌传输到客户端应用程序?

假设我有一个需要对用户进行身份验证的 Web 应用程序。它不是自己做,而是将用户重定向到专用的身份验证服务。

在那里,用户登录,并创建一个 JSON Web 令牌 (JWT),其中包含用户的声明。

现在 - 我如何将 JWT 发送回客户端应用程序?

基本上,我可以再次进行重定向,但是我需要将 JWT 放入 url,并且我想避免这种情况(我想让有权访问浏览器的每个人都可以看到 url 中的令牌并不是最好的主意历史)。

我还能/应该做什么?

我可以想象POST回到原始服务器并将 JWT 发送到正文中。然后它将被隐藏,并且原始服务器无论如何都可以访问令牌。

还有其他想法或建议吗?

0 投票
0 回答
230 浏览

facebook - 从 WPF 客户端使用 azure 访问控制时弹出错误的浏览器窗口

我目前正在实施 azure 访问控制作为我们支持 WPF 客户端和网站的许多不同应用程序的默认身份验证平台。

我在 WPF 客户端中看到以下奇怪行为。

使用 Azure 身份验证库,我正在运行以下代码行来获取 JWT 令牌,然后用于对我们的服务进行身份验证。

在测试中,我们对 Facebook 直接对我们网站的服务进行身份验证没有问题,它们运行良好。Google 和 Microsoft ID 在 WEB 和 WPF 情况下也可以正常工作。

但是,当从我们的一个 WPF 客户端使用 Facebook 时,会弹出一个浏览器窗口并显示以下错误。

根据 stackoverflow 上发现的类似错误的建议,我已经重置了我的 facebook 应用程序设置,但似乎找不到最终答案

0 投票
1 回答
5629 浏览

rest - 使用 JWT 联合身份的 REST 身份验证/授权

我正在考虑开发一个使用 REST 公开服务的应用程序。这些服务将通过浏览器和非浏览器客户端访问。我预计会有许多由不同团体拥有和管理的软件安装。我想让一个系统的用户能够访问另一个系统上的服务。它们不会共享相同的身份存储。我希望用户可以对其实例进行身份验证,然后使用令牌向其实例和远程实例发出请求。这似乎是 JSON Web Tokens (JWT) 的一个很好的用途。每个系统都需要配置为相互信任由证书签名的令牌。

我已经读到这可以使用带有 JWT Bearer 令牌的 OAuth 来完成,但这似乎比需要的开销更大。为什么将不记名令牌交换为访问令牌而不是仅使用不记名令牌?我质疑 OAuth 是否合适,因为它不是控制系统是否可以访问用户的数据,就像网络上的许多示例一样,而是用户是否可以访问存储在系统中的数据。

问题的下一部分是确定如何创建这些 JWT 令牌,看起来像 WS-Trust STS 这样的东西是合适的。我还没有看到任何简单的,只是验证用户并返回令牌。可能还支持延长令牌的到期时间和令牌的验证是否有用?

过去,我能够使用带有 WS-Security 和 SAML Assertions 的 SOAP 来启用这种类型的功能。我想看看是否可以使用 REST 和 JWT 令牌来完成相同的操作。网上有很多帖子建议不要使用自己的安全框架,所以我有点犹豫要不要继续前进。我看到微软添加了处理程序来保护使用 JWT 令牌的服务,所以他们似乎看到了这种方法的一些价值。

有没有人了解以符合标准且简单的方式为 REST 服务完成这种身份联合的方法?

0 投票
2 回答
2506 浏览

google-app-engine - 如何验证 JWT 签名?

我想使用 Go AppEngine 后端对 Android 用户进行身份验证,

我可以通过遵循http://android-developers.blogspot.co.il/2013/01/verifying-back-end-calls-from-android.html在 Android 中轻松获取 ID 令牌

ID-token 有效负载可以使用https://code.google.com/p/google-api-go-client/库的 oauth2/v2 包进行验证。

使用 AppEngine 需要进行一些安装调整,我在http://golangtutorials.blogspot.co.il/2011/11/using-external-api-in-go-appengine.html找到了一些指示

根据文档:“验证签名事实证明,这是使用 Google 公钥/私钥对签署的,Google 在 www.googleapis.com/oauth2/v1/certs 上发布公钥(我们定期更改);去向前看。

您必须验证 ID 令牌(实际上是 JSON Web 令牌)是否已使用这些证书之一进行签名。幸运的是,周围有不错的图书馆可以做到这一点。在这篇文章中,我将介绍 Java、Ruby 和 PHP。

这些库可以缓存 Google 证书并仅在需要时刷新它们,因此验证(几乎总是)是一个快速的静态调用。”

如何在 Go 中验证令牌是否由 Google 签名?

0 投票
0 回答
232 浏览

wcf - 实施基于声明的安全模型以保护 WCF 服务

目前,我们所有的 Web 应用程序(以及与之交互的 WCF 服务)都在内部运行。没有任何东西暴露在网络上。我们希望向 Internet 开放我们的 Web 应用程序,并且需要保护对服务的访问。

我们有几个现有的“RESTful”WCF 服务(使用 WebHTTPBinding)。我们希望使用 Windows Azure 访问控制服务 (ACS) 和几个可能的身份提供者(Google 和一个或多个 Active Directory 联合服务)来保护这些服务。我想使用 JWT 作为令牌格式(我知道它在 Azure 中处于测试阶段)。我希望有人可以提供一些建议或指出好的教程的方向......我读到的所有内容都是使用 ASP.NET WebAPI 来创建服务,我们不想使用它。

我们希望能够支持任何可以解析 JSON 的客户端。目前,我们的网络应用程序只是 HTML/jquery。

一些指导会很棒。谢谢!

0 投票
3 回答
6224 浏览

android-pay - java解码JWT

我正在用 Java 编码/解码 JWT 字符串……专门用于应用内购买。

我在看这个例子

https://code.google.com/p/gwdg-java/source/browse/src/java/com/google/iapsample/JWT_Handler.java

我可以使用 SIGNING 键将字符串编码为 JWT。

然后我可以通过调用 deserialize() 将 JWT 解码回源字符串。

但是,如果您查看代码 - 您会注意到该方法不使用 SIGNING 键进行解码……但它确实可以正确解码。

使困惑!

是 JWT 字符串本身中的密钥 - 这没有任何安全意义!

0 投票
2 回答
4733 浏览

asp.net-web-api - ASP.NET Web API - 经过身份验证的加密 JWT 令牌 - 我需要 OAuth 吗?

我正在考虑使用经过身份验证的加密 JWT 令牌来验证/授权对 ASP.NET Web API 应用程序的访问。

根据我到目前为止所读到的内容,在我看来,这是一种从令牌服务生成 JWT 令牌并通过 http 授权标头将它们传递给 Web API 的选项。

我找到了一些关于实现 JWT 创建和使用的很好的代码示例(Pro ASP.NET Web API Security by Badrinarayanan Lakshmiraghavan)。

我试图了解是否需要完整的 OAuth 实现来支持这一点,或者我是否可以简单地在 auth 标头中传递令牌。

假设令牌已正确加密和签名,在不必使用 OAuth 的情况下保持简单是否存在任何固有的安全缺陷?

在不影响安全性的情况下,尽量让事情变得简单以满足我的需求。