Tag: token

如何从令牌中提取并获得声明?

我一直在寻找一个确切的答案,但似乎大多数答案是客户电话和超出范围。 问题:我已经拥有访问令牌访问令牌。 如何仅使用访问令牌使用c#代码获取声明? 我想:以下是相同的问题,但我认为没有答案。 如何从经过身份validation的SecurityToken中获取声明 如何从我的Oauth令牌中读取声明?

如何在Oauth2中同时撤销RefreshToken并使AccessToken无效

我正在使用Owin Oauth2(授权和资源服务器是相同的)开发单页面应用程序(AngularJS + .Net MVC Json Rest API)的身份validation流程。 我在传统的cookie +会话中选择了Bearer Token路由,因为我希望保持无状态,并且因为移动应用程序将使用相同的Api,其中令牌的问题少于cookie。 这是简化的流程: 用户将用户名/密码提交给服务器(通过Https POST到TokenProvider路由) Owin创建一个AccessToken ,其AccessToken包含生成的GUID(代表会话ID)和其他一些声明。 Owin创建了一个RefreshToken 。 Server在RefreshToken表中创建一个条目,其中包含以下字段: GUID(PK)| RefreshToken |订票| DateIssued | DateExpire | DateEnd Server为客户端提供AccessToken和RefreshToken 。 客户端将AccessToken和RefreshToken存储到SessionStorage中。 客户端使用AccessToken访问Api。 当AngularJS检测到AccessToken即将到期时,它会缓冲所有请求并发出grant_type refresh_token request ; server使用客户端提供的RefreshToken ,并且: 从Db检查刷新令牌是否仍然有效( DateExpire > GetTime() And DateEnd is Null ) 从Db拿到机票 从Ticket创建AccessToken 使用新Dates,新RefreshToken和新Ticket更新db条目(注意:GUID保持不变) 当客户端访问注销服务器端时,从已记录用户的身份声明中读取的GUID用于使表上的条目无效( DateEnd = GetTime() )。 客户端两个令牌都从SessionStorage中删除。 […]

使用webAPI承载令牌进行SignalR认证

+我使用这个解决方案使用ASP.NET Web API 2,Owin和Identity实现基于令牌的身份validation……效果非常好。 我使用了这个其他的解决方案 ,这通过将承载令牌传递给连接字符串来实现signalR集线器授权和认证,但看起来要么是承载令牌没有,要么某处出现其他错误,这就是为什么我在这里寻求帮助。 ..这些是我的代码… QueryStringBearerAuthorizeAttribute:这是负责validation的类 using ImpAuth.Entities; using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.Owin.Security; using Microsoft.Owin.Security.OAuth; using System; using System.Collections.Generic; using System.Linq; using System.Security.Claims; using System.Threading.Tasks; using System.Web; namespace ImpAuth.Providers { using System.Security.Claims; using Microsoft.AspNet.SignalR; using Microsoft.AspNet.SignalR.Hubs; using Microsoft.AspNet.SignalR.Owin; public class QueryStringBearerAuthorizeAttribute : AuthorizeAttribute { public override bool AuthorizeHubConnection(HubDescriptor hubDescriptor, IRequest request) { var token […]

为什么缓存访问令牌在oauth2中被认为是错误的?

我正在关注此文章以撤消用户访问权限: Enable OAuth Refresh Tokens in AngularJS App using ASP .NET Web API 2, and Owin 现在考虑validation用户后我已经发布了一个30分钟的生命周期的accessstoken,如上文所示,并且刷新令牌为1天,但如果管理员在10分钟内删除该用户20分钟仍然如此,那么现在我需要撤消该用户的访问权限。 为了做到这一点,我需要从刷新令牌表中删除该用户条目以禁止进一步的访问令牌请求,但由于accessstoken到期时间仍然是20分钟,因此用户将能够访问完全错误的受保护资源。 所以我想实现缓存机制来缓存服务器上的访问令牌并保存在数据库中 。 因此,当该用户被撤销时,我可以简单地从缓存和数据库中删除该用户条目,以阻止该用户访问访问受保护资源。 但是下面这两个答案说这不是oauth2的设计方式: 撤消OAuthBearerAuthentication的访问令牌 OAuth2 – 刷新令牌不必要的复杂性 所以我的问题是: 1)为什么缓存访问令牌不被认为比刷新令牌机制更好,也是一种糟糕的方法? 我的第二个问题是基于@Hans Z给出的以下答案,其中他说: 这必然涉及资源服务器(RS)咨询授权服务器(AS),这是一个巨大的开销。 2)如果撤销用户的访问权限,为什么RS会咨询AS,因为AS仅用于validation用户并根据本文生成访问令牌? 3)在文章中只有2个项目: Authentication.api – validation用户并生成访问令牌 资源服务器 – 借助[Authorize]属性validationaccesstoken 在上述情况下,授权服务器呢? 更新:我决定使用刷新令牌撤消用户访问以防用户被删除,并且当用户注销时我将刷新令牌刷新令牌表因为您要求我们在用户点击注销后立即注销用户。 但这里的问题是我有250个与用户相关的角色,所以如果我把角色放在accesstoken中,那么accesstoken的大小将是如此巨大,我们无法从头部传递如此巨大的accessstoken但我无法查询角色以validation每次端点的用户访问权限调用端点。 所以这是我面临的另一个问题。