Tag: bearer token

用于承载令牌认证的Owin中间件,支持JWT密钥轮换

我正在寻找配置owin中间件承载令牌身份validation以支持Open Id Connect密钥轮换的一些指导。 Opend Id Connect规范说明了关于键旋转的以下内容: 可以使用以下方法完成签名密钥的旋转。 签名者在其jwks_uri位置的JWK集中发布其密钥,并在每个消息的JOSE标题中包括签名密钥的孩子,以向validation者指示将使用哪个密钥来validation签名。 可以通过在jwks_uri位置定期向JWK Set添加新密钥来覆盖密钥。 签名者可以自行决定开始使用新密钥,并使用kid值向validation者发出更改信号。 validation者知道返回到jwks_uri位置以在看到不熟悉的孩子值时重新检索密钥。 我在这个主题上可以找到的最相似的问题是: OWIN中的SecurityTokenSignatureKeyNotFoundException连接到Google的OpenID Connect中间件 解决方案不能正常工作,因为在发出新私钥和客户端刷新其公钥缓存之间会出现错误。 因此,我想配置客户端,以便在找到有效的,正确签名的,未过期的JWT令牌时下载丢失的公共JWK密钥,该JWT令牌具有不在本地缓存的孩子。 我目前正在使用IdentityServer3.AccessTokenValidation,但客户端在收到一个无法识别的孩子的令牌时不会下载新密钥。 我快速浏览了一下Microsoft.Owin.Security.Jwt – > UseJwtBearerAuthentication以及Microsoft.Owin.Security.OpenIdConnect – > UseOpenIdConnectAuthentication但我没有太过分。 我正在寻找一些方向来扩展/配置任何上述软件包以支持密钥轮换。

ASP.NET Core 2.0 JWTvalidation因“用户授权失败:(null)”错误而失败

我正在使用ASP.NET Core 2.0应用程序(Web API)作为JWT发行者来生成移动应用程序的令牌消费品。 不幸的是,这个令牌无法由一个控制器validation,而另一个控制器可以validation(在同一个asp.net核心2.0应用程序中使用相同的validation设置)。 所以我有一个有效且可以解码的令牌,具有所有必需的声明和时间戳。 但是一个端点接受它,而另一个端点给我401错误和调试输出: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService:信息:用户授权失败:(null)。 [40m[32minfo[39m[22m[49m: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] Authorization failed for user: (null). Microsoft.AspNetCore.Authorization.DefaultAuthorizationService:Information: Authorization failed for user: (null). [40m[32minfo[39m[22m[49m: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[3] Authorization failed for the request at filter ‘Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter’. Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Authorization failed for the request at filter ‘Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter’. Microsoft.AspNetCore.Mvc.ChallengeResult:Information: Executing ChallengeResult with authentication schemes (). [40m[32minfo[39m[22m[49m: Microsoft.AspNetCore.Mvc.ChallengeResult[1] Executing ChallengeResult with authentication schemes (). […]

OWIN中IIS主机的默认OAuth AccessTokenFormat实现是什么?

Web API 2 OWIN承载令牌认证 – AccessTokenFormat null? 默认/令牌端点工作正常,我可以从那里获得令牌,但我需要在票证上使用AccessTokenFormat.Protect方法为externalLogin生成accessToken。 基本上我的实现与这个实现几乎相同,我遇到了同样的问题,即AccessTokenFormat为null。 从文档中说: 用于保护访问令牌中包含的信息的数据格式。 如果应用程序未提供,则默认数据保护提供程序依赖于主机服务器。 IIS上的SystemWeb主机将使用ASP.NET机器密钥数据保护,而HttpListener和其他自托管服务器将使用DPAPI数据保护。 如果分配了不同的访问令牌提供程序或格式,则必须将兼容的实例分配给资源服务器的OAuthBearerAuthenticationOptions.AccessTokenProvider或OAuthBearerAuthenticationOptions.AccessTokenFormat属性。 在我看来,如果未分配AccessTokenFormat,主机将为其提供基本实现。 但我认为它不适用于此。 有没有办法找到ISecureDataFormatAccessTokenFormat的默认实现并手动将其分配给变量? 或者有没有人有其他想法如何解决这个问题? 更新:我获取katana的源代码并找到OAuthAuthorizationServerMiddleware类,从源代码我可以看到以下代码: if (Options.AccessTokenFormat == null) { IDataProtector dataProtecter = app.CreateDataProtector( typeof(OAuthAuthorizationServerMiddleware).Namespace, “Access_Token”, “v1”); Options.AccessTokenFormat = new TicketDataFormat(dataProtecter); } 在我的Startup.Auth中,这是我的代码: static Startup() { PublicClientId = “self”; UserManagerFactory = () => new UserManager(new UserStore(new ApplicationDbContext())); OAuthOptions = new OAuthAuthorizationServerOptions() […]

为Bearer授权添加额外的逻辑

我正在尝试实施OWIN持票人令牌授权,并基于这篇文章 。 但是,在承载令牌中我需要一条额外的信息,我不知道如何实现。 在我的应用程序中,我需要从持有者令牌中推断出用户信息(比如userid)。 这很重要,因为我不希望授权用户能够充当其他用户。 这可行吗? 它甚至是正确的方法吗? 如果用户标识是guid,那么这很简单。 在这种情况下,它是一个整数。 授权用户可能只是通过猜测/暴力来冒充他人,这是不可接受的。 看看这段代码: public void ConfigureOAuth(IAppBuilder app) { OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() { AllowInsecureHttp = true, TokenEndpointPath = new PathString(“/token”), AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), Provider = new SimpleAuthorizationServerProvider() }; // Token Generation app.UseOAuthAuthorizationServer(OAuthServerOptions); app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); } public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider { public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext […]

在c#中手动解码OAuth承载令牌

在我的基于Web Api 2.2 OWIN的应用程序中,我有一种情况,我手动需要解码承载令牌,但我不知道如何做到这一点。 这是我的startup.cs public class Startup { public static OAuthAuthorizationServerOptions OAuthServerOptions { get; private set; } public static UnityContainer IoC; public void Configuration(IAppBuilder app) { //Set Auth configuration ConfigureOAuth(app); ….and other stuff } public void ConfigureOAuth(IAppBuilder app) { OAuthServerOptions = new OAuthAuthorizationServerOptions() { AllowInsecureHttp = true, TokenEndpointPath = new PathString(“/token”), AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), […]

如何在客户端获取DotNetOpenAuth.OAuth2返回的错误消息?

我正在使用ExchangeUserCredentialForToken函数从授权服务器获取令牌。 当我的用户存在于我的数据库中时,它工作正常,但是当凭据是incorect时,我想向客户端发回消息。 我正在使用以下2行代码来设置错误消息: context.SetError(“Autorization Error”, “The username or password is incorrect!”); context.Rejected(); 但在客户端,我只得到协议错误(错误400)。 您能帮我解决一下如何在授权服务器上获取服务器端设置的错误消息? 来自授权服务器的完整应用程序配置: using Constants; using Microsoft.Owin; using Microsoft.Owin.Security; using Microsoft.Owin.Security.Cookies; using Microsoft.Owin.Security.Infrastructure; using Microsoft.Owin.Security.OAuth; using Owin; using System; using System.Collections.Concurrent; using System.Linq; using System.Security.Claims; using System.Security.Principal; using System.Threading.Tasks; using AuthorizationServer.Entities; using AuthorizationServer.Entities.Infrastructure.Abstract; using AuthorizationServer.Entities.Infrastructure.Concrete; namespace AuthorizationServer { public partial class Startup { […]

WebApi OAuth UseOAuthBearerAuthentication给出“Sequence包含多个元素”错误

我按以下方式配置了我的WebApi OAuth 2.0: app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions { Provider = new OAuthBearerAuthenticationProvider(), }); app.UseOAuthBearerTokens(OAuthOptions); 但它在每个请求时给出了以下错误: Message : An error has occurred. ExceptionMessage : Sequence contains more than one element ExceptionType : System.InvalidOperationException StackTrace : at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source) at Microsoft.Owin.Security.AuthenticationManager.d__8.MoveNext() — End of stack trace from previous location where exception was thrown — at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task […]