Tag: openid connect

OWIN OpenID连接授权无法授权安全控制器/操作

我正在开发一个项目,其中第三方提供商将充当基于Oauth2的授权服务器。 一个基于Asp.net MVC 5的客户端,它将用户发送给授权服务器进行身份validation(使用登录/密码),auth服务器将一个访问令牌返回给MVC客户端。 将使用访问令牌对资源服务器(API)进行任何进一步调用。 为此,我使用的是Microsoft.Owin.Security.OpenIdConnect和UseOpenIdConnectAuthentication扩展。 我能够成功重定向并从auth服务器获取访问令牌,但客户端没有创建身份validationCookie。 每次我尝试访问安全页面时,都会获得带有访问令牌的回调页面。 我在这里想念的是什么? 我目前的代码如下。 安全控制器动作: namespace MvcWebApp.Controllers { public class SecuredController : Controller { // GET: Secured [Authorize] public ActionResult Index() { return View((User as ClaimsPrincipal).Claims); } } } 启动类: public class Startup { public void Configuration(IAppBuilder app) { app.SetDefaultSignInAsAuthenticationType(“ClientCookie”); app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationMode = AuthenticationMode.Active, AuthenticationType = “ClientCookie”, […]

OpenID Connect轻量级库

我正在寻找将实现这些例程的OpenID Connect(OIDC)依赖方轻量级库 。 撰写“身份validation请求” validation“id_token”签名(包括从元数据端点下载证书) 解析“id_token”JWT 要支持的唯一OIDC流是所谓的“ 隐式流 ”,其中服务器从授权端点( 规范链接 )回答“id_token”(以及“access_token”,如果请求)。 搜索NuGet存储库似乎只能产生唯一合适的选项–OWIN中间件,即使我可以确认它有效,但最好还是选择轻量级替代品。

ASP.NET Web API和OpenID Connect:如何从授权代码获取访问令牌

我尝试让OpenID Connect运行…我的Web API用户设法获得OpenID Connect Provider的授权码。 我应该如何将此代码传递给我的ASP.NET Web API? 我如何配置OWIN中间件,以便我可以使用授权码获取访问令牌? 更新:SPA使用AJAX与我的Web服务(ASP.NET Web API)进行通信。 在我的Web服务中使用OWIN Middleware。 我将OpenIDConnect设置为身份validation机制。 首次调用Web服务时,它成功将用户重定向到OpenID Connect Provider的登录页面。 用户可以登录并获得授权码。 AFAIK此代码现在可以(通过我的Web服务)用于访问令牌。 但是,我不知道如何将此代码返回到我的Web服务(这是使用标头完成吗?)然后配置什么来获取访问令牌。 我想我可以手动调用令牌端点,但我想利用OWIN组件。

validationJWT签名时的SecurityTokenSignatureKeyNotFoundException

我正在尝试为我的组织实施OpenID Connect规范。 我在测试依赖方应用程序中使用Microsoft的OpenID Connect的OWIN实现来validation我的协议实现。 我已经公开了以下元数据文档: { “issuer”: “https://acs.contoso.com/”, “authorization_endpoint”: “http://localhost:53615/oauth2/auth”, “token_endpoint”: “http://localhost:53615/oauth2/token”, “userinfo_endpoint”: “http://localhost:53615/connect/userinfo”, “jwks_uri”: “http://localhost:53615/connect/keys”, “ui_locales_supported”: [ “en-GB” ] } 签名密钥作为此文档公开: { “keys”: [ { “n”: “xpXxl3M-YkZlzQJdArO1TfOGT2no-UL4dbZ7WuSCNIsSfyGDaqUXjMMHNyq9yD3vp-NCyk8kmn7d5XqHufnceXJM8q4xTrhN3lvywdBSbR-dwXsA-B-MJVgfiK0d_z-mxP9ew2Hj9-KkWbWCzsswlWp3gZ4mB4RGutB1IRSzXVIbvZ-MtKUb6XUDU4LDb_c1xCEXWZxhR-o1a1dLfObH2hHJ-w5y6odGlKtOFx4i4h0u7-Oj5R6k5b2YXEHM0IuYeN0u0sQvrTecokntGzPrvhnKy69I7Z_az5rC5kgloh25D9lTbe4vcRU7FXlYCFYDZsT0_IkGIXRi7brOS4f1ow”, “e”: “AQAB”, “kty”: “RSA”, “use”: “sig”, “alg”: “RS256”, “kid”: “F8A59280B3D13777CC7541B3218480984F421450” } ] } 使用JwtSecurityToken类使用JwtSecurityToken类及其关联的处理程序生成标识令牌。 此代码表示如何构造令牌并将其作为响应数据的参数返回给调用系统。 var credentials = new X509SigningCredentials(cert); // My certificate. var issuedTime = DateTime.UtcNow; […]

使用授权中间件而不是AuthorizationAttribute ASPNET Core

我有一个专用的IdServer运行,它有一个登录页面,其他应用程序将启动未经身份validation的用户。 我目前的管道是: app.UseCookieAuthentication app.UseOpenIdConnectAuthentication app.UseDefaultFiles // because it is a SPA app app.UseStaticFiles // the SPA app 所以所有教程都说要在你的控制器上使用[Authorize] …… 但是,我希望中间授权我的所有控制器和静态文件。 那么我该如何编写一个中间件来处理它呢。 我目前的设置是: public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IOptions identityServerAppOptions) { loggerFactory.AddConsole(Configuration.GetSection(“Logging”)); loggerFactory.AddDebug(); var serverAppOptions = identityServerAppOptions.Value; loggerFactory.CreateLogger(“Configure”).LogDebug(“Identity Server Authority Configured: {0}”, serverAppOptions.Authority); JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationScheme = “Cookies” }); app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions […]

覆盖AspNet.Security.OpenIdConnect.Server中的TokenEndPoint

与此帖相关的问题: 配置授权服务器端点 。 使用上面的例子,我可以得到令牌。 以前可以通过骑马获得额外的信息 public override Task TokenEndpoint(OAuthTokenEndpointContext context) { foreach (KeyValuePair property in context.Properties.Dictionary) { context.AdditionalResponseParameters.Add(property.Key, property.Value); } return Task.FromResult(null); } 你如何在当前的实施中实现这一目标 public override Task TokenEndpoint(TokenEndpointContext context){ } 谢谢!

使用OpenIdConnectServer并尝试通过API服务连接到Facebook

我正试图找出一种方法,使我的API能够将Facebook用户与我的身份用户相关联。 应用程序上下文 我正在开发一个移动应用程序(在Xamarin中),需要使用用户名/密码和Facebook登录。 我已经设置了app.UseOpenIdConnectServer配置并创建了自定义Provider因此我的应用程序已经在使用用户名/密码。 现在我正试图与Facebook进行这种集成,而不是找到一种方法来实现这一目标。 我正在考虑在API中创建服务,例如/api/auth/login-facebook/从Facebook传递access-token ,但我需要将我的API应用程序的access-token返回到移动应用程序,以便移动应用程序可以调用所有其他需要授权的服务。 对此有何帮助? 我想要获得的视觉方式: 用户在移动应用程序中按“使用Facebook登录” 移动应用程序调用/api/auth/login-facebook/从Facebook传递access-token 在API应用程序中,我将使用Facebook包检查access-token 如果用户不存在,我将使用Facebook返回的数据创建他,之后我将生成access-token以授予对我的API应用程序的访问权限 如果用户存在,我将生成access-token以授予对我的API应用程序的访问权限 将access-token返回给移动应用程序,以便它可以调用其他服务 如果我的知识错了,我应该以另一种方式进行这种整合/登录,请随意告诉我!

使用JwtBearerAuthentication签名密钥

我正在尝试使用JwtBearerMiddleware在我的AspNetCore MVC应用程序(仅限Web API)中实现JWT承载身份validation,但我收到了带有标头的401响应: WWW-Authenticate: Bearer error=”invalid_token”, error_description=”The signature key was not found” Startup.cs中的相关代码如下所示: app.UseJwtBearerAuthentication(new JwtBearerOptions { Authority = “https://example.okta.com”, Audience = “myClientId” }); 使用权限URL,我希望中间件从https://example.okta.com/.well-known/openid-configuration查询我的身份提供程序元数据,以获取jwks_uri ,然后从https://example.okta.com/oauth2/v1/keys获取签名密钥https://example.okta.com/oauth2/v1/keys 。 我不认为这种情况正在发生。 我需要做些什么才能找到并使用签名密钥? 谢谢

Owin,在身份validation请求中传递自定义查询参数

我们有自己的OpenID Connect Provider。 我们希望使用Owin中间件在身份validation请求中传递自定义查询参数。 我们无法找到使用Microsoft.Owin.Security.OpenIdConnect程序集实现此方法的方法。 甚至我们也找不到如何向Authentication Request添加标准请求参数(例如“ login_hint parameter”)。 例如,Google有“ login_hint ”和“ hd ”参数( https://developers.google.com/accounts/docs/OAuth2Login#sendauthrequest ),我们希望拥有几乎相同的参数。 但我们甚至无法找到如何使用Owin将这些参数发送给Google。 试过这段代码: var googleOptions = new GoogleOAuth2AuthenticationOptions() { ClientId = “…”, ClientSecret = “…”, }; app.UseGoogleAuthentication(googleOptions); … public ActionResult ExternalLogin(string provider) { var ctx = Request.GetOwinContext(); var properties = new AuthenticationProperties(); properties.Dictionary.Add(“login_hint “, “myemail@gmail.com”); properties.Dictionary.Add(“hd”, “hd”); ctx.Authentication.Challenge(properties, provider); return […]

validationGoogle OpenID Connect JWT ID令牌

我正在尝试升级我的MVC网站以使用新的OpenID Connect标准。 OWIN中间件看起来非常强大,但不幸的是只支持“form_post”响应类型。 这意味着Google不兼容,因为它会在“#”后面的URL中返回所有令牌,因此它们永远不会到达服务器并且永远不会触发中间件。 我试图在中间件中自己触发响应处理程序,但这似乎根本不起作用,所以我有一个简单的javascript文件解析返回的声明并将它们发送到控制器动作进行处理。 问题是,即使我在服务器端获取它们,我也无法正确解析它们。 我得到的错误看起来像这样: IDX10500: Signature validation failed. Unable to resolve SecurityKeyIdentifier: ‘SecurityKeyIdentifier ( IsReadOnly = False, Count = 1, Clause[0] = System.IdentityModel.Tokens.NamedKeySecurityKeyIdentifierClause ), token: ‘{ “alg”:”RS256″, “kid”:”073a3204ec09d050f5fd26460d7ddaf4b4ec7561″ }. { “iss”:”accounts.google.com”, “sub”:”100330116539301590598″, “azp”:”1061880999501-b47blhmmeprkvhcsnqmhfc7t20gvlgfl.apps.googleusercontent.com”, “nonce”:”7c8c3656118e4273a397c7d58e108eb1″, “email_verified”:true, “aud”:”1061880999501-b47blhmmeprkvhcsnqmhfc7t20gvlgfl.apps.googleusercontent.com”, “iat”:1429556543,”exp\”:1429560143 }’.” } 我的令牌validation码遵循开发IdentityServer的优秀人员概述的示例 private async Task<IEnumerable> ValidateIdentityTokenAsync(string idToken, string state) { // New Stuff var […]