在没有 cookie 的情况下处理身份验证
Handling authentication without a cookie
我们的团队在我们的 SP 中使用 Itfoxtec 作为 saml2 处理程序,如下所示:
- 一个客户点击登录 API 的 link。
- API 将用户重定向到 IdP 登录页面。
- 成功登录后,API 获得对 ASC 路由的 SAML2 响应。
- 我们从响应中获取声明。
- 如果用户可以使用,我们会生成一个 JWT 令牌,用于使用授权 header 对其他服务的下一次请求,否则我们会发送未经授权的响应。
这里是处理程序的配置:
builder.Services
.AddAuthentication("saml2")
.AddCookie("saml2", cookieAuthenticationOptions =>
{
cookieAuthenticationOptions.SlidingExpiration = true;
cookieAuthenticationOptions.LoginPath = new PathString("/saml/request");
cookieAuthenticationOptions.Cookie.SameSite = SameSiteMode.None;
cookieAuthenticationOptions.Cookie.SecurePolicy = CookieSecurePolicy.Always;
Task UnAuthorizedResponse(RedirectContext<CookieAuthenticationOptions> context) =>
Task.FromResult(context.Response.StatusCode = (int)HttpStatusCode.Unauthorized);
cookieAuthenticationOptions.Events.OnRedirectToAccessDenied = UnAuthorizedResponse;
cookieAuthenticationOptions.Events.OnRedirectToLogin = UnAuthorizedResponse;
});
正如我们所见,Itfoxtec 的使用仅在初始登录过程中完成,用户要么获得未经授权的响应,要么获得 JWT 令牌,并且没有对 SP 进行额外调用。
请注意,当我删除与 Cookie 相关的配置时,在获取声明并在以下行中创建 session 时抛出异常:
customClaims = await saml2AuthnResponse.CreateSession(HttpContext, claimsTransform: GetCustomClaimsPrincipal);
我们的问题是,有没有其他方法可以将 Itfoxtec 用作 SAML2 处理程序而不使用 Cookie?
您不需要使用会话 cookie。如果您不使用会话 cookie,则不应调用创建基于 cookie 的 .NET 会话的 CreateSession
方法。
SAML 2.0 Authn 请求在 Unbind
method 中得到验证,之后您可以安全地阅读 saml2AuthnResponse.ClaimsIdentity.Claims
中的用户声明。
FoxIDs use the ITfoxtec Identity SAML 2.0 component without using the cookie based .NET session, you can see how the SAML 2.0 Authn request is validated in the AuthnResponseAsync
method.
我们的团队在我们的 SP 中使用 Itfoxtec 作为 saml2 处理程序,如下所示:
- 一个客户点击登录 API 的 link。
- API 将用户重定向到 IdP 登录页面。
- 成功登录后,API 获得对 ASC 路由的 SAML2 响应。
- 我们从响应中获取声明。
- 如果用户可以使用,我们会生成一个 JWT 令牌,用于使用授权 header 对其他服务的下一次请求,否则我们会发送未经授权的响应。
这里是处理程序的配置:
builder.Services
.AddAuthentication("saml2")
.AddCookie("saml2", cookieAuthenticationOptions =>
{
cookieAuthenticationOptions.SlidingExpiration = true;
cookieAuthenticationOptions.LoginPath = new PathString("/saml/request");
cookieAuthenticationOptions.Cookie.SameSite = SameSiteMode.None;
cookieAuthenticationOptions.Cookie.SecurePolicy = CookieSecurePolicy.Always;
Task UnAuthorizedResponse(RedirectContext<CookieAuthenticationOptions> context) =>
Task.FromResult(context.Response.StatusCode = (int)HttpStatusCode.Unauthorized);
cookieAuthenticationOptions.Events.OnRedirectToAccessDenied = UnAuthorizedResponse;
cookieAuthenticationOptions.Events.OnRedirectToLogin = UnAuthorizedResponse;
});
正如我们所见,Itfoxtec 的使用仅在初始登录过程中完成,用户要么获得未经授权的响应,要么获得 JWT 令牌,并且没有对 SP 进行额外调用。
请注意,当我删除与 Cookie 相关的配置时,在获取声明并在以下行中创建 session 时抛出异常:
customClaims = await saml2AuthnResponse.CreateSession(HttpContext, claimsTransform: GetCustomClaimsPrincipal);
我们的问题是,有没有其他方法可以将 Itfoxtec 用作 SAML2 处理程序而不使用 Cookie?
您不需要使用会话 cookie。如果您不使用会话 cookie,则不应调用创建基于 cookie 的 .NET 会话的 CreateSession
方法。
SAML 2.0 Authn 请求在 Unbind
method 中得到验证,之后您可以安全地阅读 saml2AuthnResponse.ClaimsIdentity.Claims
中的用户声明。
FoxIDs use the ITfoxtec Identity SAML 2.0 component without using the cookie based .NET session, you can see how the SAML 2.0 Authn request is validated in the AuthnResponseAsync
method.