- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我们的应用程序包括:
因此,当未经身份验证的用户浏览到 SPA 时,SPA 会与我们的后端启动 OAuth2 隐式流,这会导致重定向到显示登录表单的 OpenID 连接提供程序。用户登录后,JWT token 将发布到我们后端的 OIDC 回调端点,这会触发将身份存储在 cookie 中的 cookie 中间件,并重定向到 OAuth2 授权端点,该端点通过返回访问 token 恢复隐式流在 URL 片段中。
为此,我目前使用 OWIN Cookie 中间件将 OpenID Connect 中间件与 OAuth2 中间件粘合在一起,其中 cookie 过期时间非常短,因为唯一的目的是将身份从 OpenID 连接回调传递给 OAuth2 授权端点。因此,我想问问是否有一种方法可以做到同样的事情,但没有 cookie 中间件,因为在这个设置中感觉有点多余。
不管怎样,这是我们的中间件配置:
// Clear default inbound claim mappings, otherwise the 'sub' claim is mapped to a ClaimTypes.NameIdentifier which is not what we want
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = new[] { options.JwtOptions.Audience },
IssuerSecurityKeyProviders = new[] { new X509CertificateSecurityKeyProvider(options.JwtOptions.Issuer, options.JwtOptions.SigningCertificate) }
});
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Passive,
CookieName = "Brownie",
CookieHttpOnly = true,
CookieSecure = CookieSecureOption.Always,
ExpireTimeSpan = TimeSpan.FromMinutes(1),
SlidingExpiration = false
});
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AuthenticationType = Constants.OpenIdConnectAuthenticationType,
MetadataAddress = options.OpenIdConnectOptions.MetadataAddress,
ClientId = options.OpenIdConnectOptions.ClientId,
ClientSecret = options.OpenIdConnectOptions.ClientSecret,
Notifications = new OpenIdConnectNotificationHandlers(options),
RedirectUri = new Uri(options.ApplicationUrl, options.OpenIdConnectOptions.CallbackPath.ToString()).ToString(),
ResponseType = "code id_token",
Scope = "openid profile offline_access",
SignInAsAuthenticationType = CookieAuthenticationDefaults.AuthenticationType
});
app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
{
AuthenticationMode = AuthenticationMode.Active,
AuthenticationType = Constants.OAuth2AuthenticationType,
AuthorizeEndpointPath = options.AuthorizeEndpoint,
TokenEndpointPath = options.TokenEndpoint,
AllowInsecureHttp = false,
AccessTokenExpireTimeSpan = options.JwtOptions.TokenLifetime,
AccessTokenFormat = new JwtTokenFormat(options.JwtOptions),
Provider = new OAuth2AuthorizationServerProvider(context => context.GetAutofacLifetimeScope().Resolve<IClientRepository>())
});
将 Constants.OAuth2AuthenticationType
传递给 OpenID Connect 中间件的 SignInAsAuthenticationType
不起作用。
最佳答案
一般来说,这是最佳实践,并按照 OpenID Connect Basic Client Implementer's Guide 1.0 - draft 37 Section 2.1.1.1. Request Parameters 中所述使用“state”参数。
“推荐。用于维护请求和回调之间状态的不透明值。通常,跨站点请求伪造(CSRF、XSRF)缓解是通过将此参数的值与浏览器 cookie 加密绑定(bind)来完成的。”
关于c# - 是否需要 Cookie 中间件来粘合 OAuth2 和 OpenIdConnect?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48893969/
我正在 ASP.Net MVC C# 中开发一个依赖方,它应该在外部身份提供者中进行身份验证,我正在使用 Microsoft 的 owin 库。我遇到的问题是 Idp 没有公开元数据端点,即使我没有在
在过去的几天里,我一直在阅读有关 OAuth2 和 OpenIDConnect 的所有规范,并使用 Thinktecture Identity Server 实现了一个测试客户端。我还学习了几门复数类
在使用混合或授权代码流获取访问 token 以使其远离浏览器后,在(ASP.NET Core)OpenIdConnect 中间件中使用 SaveTokens = true 以便它们再次出现在浏览器中似
我已经使用 OpenIdConnect 通过 Azure AD 设置了一个 .NET Core 2.0 Web 应用(例如: https://github.com/Azure-Samples/acti
我已经使用 OpenIdConnect 通过 Azure AD 设置了一个 .NET Core 2.0 Web 应用(例如: https://github.com/Azure-Samples/acti
我在 ASP.NET Core 2.0 应用程序中使用 OpenIdConnectMiddleware,使用 Auth0 作为身份验证。 我关注了this guide通过Auth0实现认证,可以成功登
我有一个使用 Keycloak 注册的外部 openidconnect 身份提供商。当客户端应用程序尝试访问 protected 资源时,它会被重定向到 KeyCloak 登录页面。在登录页面上,我启
我正在尝试使用 couchbase DB 并使用授权代码流程为其设置身份验证。我按照此 link 中的步骤操作.我相应地准备了 ConfigJson。使用 Pods 我为 ios 安装了 Couchb
在 ASP.NET MVC 应用程序中,我正在尝试针对外部 OIDC 服务实现身份验证。对于我的测试,我使用 IdentityServer3 ( https://identityserver.gith
我在将 ASP.NET CORE 5.0 Web 应用程序与 OKTA 集成时遇到问题。我的公司需要将所有 Web 应用程序与 OKTA 集成。我写的这个应用程序作为 Linux 容器托管在 Farg
我试图实现 Multi-Tenancy 身份验证(我正在学习),到目前为止,我已经成功地在单租户中实现了我的应用程序的身份验证。 我用于单个租户的代码是 public void ConfigureA
我有一个 RP 没有明确要求您登录的情况。但是,我查看了 Open ID Connect 的 session 管理规范,更具体地说是 check_session_iframe端点规范草案here 我想
我想使用 对最终用户进行身份验证智威汤逊由 OpenId 提供连接提供程序,如 keycloak 或 auth0..etc 在 中istio 服务网格。但我可能无法成功集成它,因为我是 JWT aut
我们有多个租户,他们使用不同的权限(他们自己的,而不仅仅是标准提供商)。虽然我知道如何动态设置 clientId 和 secret,但我不知道如何设置权限。它在启动期间设置一次,之后无法更改(或者看起
目前,我在将 MVC 应用程序从 beta 3 迁移到 4 时遇到了多个问题 - 其中之一与 OpenIdConnect 到 Windows Azure 进行身份验证有关。当我转到具有授权属性的页面时
我有一个使用 ASP.NET Identity 运行的 IdentityServer4 应用程序。我想使用它,以便其他应用程序的用户可以通过我的远程身份服务器登录。 我已使用以下设置在身份服务器中配置
我正在尝试使用 OWIN Open ID Connect 中间件将我的 ASP.NET 应用程序的身份验证外包给 Azure Active Directory。应用程序在访问需要授权的页面时成功重定向
在 .Net 上,当我创建一个 Open ID 连接身份验证选项时,我有一个属性来设置 RedirectUri,这甚至按照文档中的建议定义,但 AspNetCore 上不存在这样的属性,它会自动设置为
普通 OpenIDConnect 服务器的工作方式如下: 你去 a.com/secure-resource 你从服务器得到一个302 您的浏览器处理它并将您发送到身份服务器 你在那里登录 它通过 PO
我不知道该使用哪个包: Microsoft.AspNet.Authentication.OpenIdConnect "1.0.0-beta4" Microsoft.AspNet.Security.Op
我是一名优秀的程序员,十分优秀!