带有 Sustainsys.Saml2 的 IdentityServer4 使 OAuth SAML 断言
IdentityServer4 with Sustainsys.Saml2 to make OAuth SAML Assertion
我在制作符合 RFC-7522 的示例时遇到问题。我拥有的是 IdentityServer4 (v2.2.0) as oAuth Authorization Server (.NET Core 2.0, Console Application) 和不同的 SAML2 IdP。现在我想使用 Saml Assertion 来验证用户。
作为灵感,我使用了这个 video,其中 Brock Allen 和 Dominick Baier 描述了如何设置 SAML2 处理程序。
但遗憾的是,我一开始就卡住了,我只想将该片段粘贴到我的代码中,但每次我都会遇到不同的编译错误(取决于我使用的 nuget)。不幸的是,我没有运气解决它们。
片段:
//IServiceCollection services
services.AddAuthentication().AddSaml2(options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.SPOptions.EntityId = new Saml2NameIdentifier(samlIdentityUrl);
var idp = new IdentityProvider(new EntityId(samlMetadataUrl), options.SPOptions)
{
SingleSignOnServiceUrl = new Uri(samlSignOnUrl),
Binding = Saml2BindingType.HttpRedirect
};
idp.SigningKeys.AddConfiguredKey(new X509Certificate2(certificate));
options.IdentityProviders.Add(idp);
});
常见的 Nugets:
- IdentityModel.Unoficial (2.8.1)
- IdentityServer4 (2.2.0)
- Microsoft.AspNetCore.All (2.0.3)
- Microsoft.IdentityModel.Tokens.Saml (5.2.4)
- Sustainsys.Saml2.AspNetCore2(见下文)
场景 #1:Sustainsys.Saml2.AspNetCore2 (0.24.0)
包 'Sustainsys.Saml2.AspNetCore2 0.24.0' 已使用“.NetFramework,Version=v4.6.1”恢复。this and this 问题中提到的内容。最重要的是,我几乎没有编译错误,可能会导致 '类型 'EntityId' 和 'SecurityKeyIdentifierClause' 在未引用的程序集中定义。'
场景 #2:Sustainsys.Saml2.AspNetCore2 (2.0.0-preview01)
缺少整个 Sustainsys 命名空间,它被替换为 Kentor.AuthServices。未找到参考 .AddSaml2(..)。
很好,我可以通过 更新 nugets 和导入 到以下状态来解决我的问题:
Nugets:
- IdentityServer4 (2.2.0)
- Microsoft.AspNetCore.All (2.0.3)
- Microsoft.IdentityModel.Token.Saml (5.2.4.)
- Sustainsys.Saml2 (2.0.0-preview01)
- Sustainsys.Saml2.AspNetCore2 (2.0.0-preview01)
进口:
using Microsoft.IdentityModel.Tokens.Saml2;
using Kentor.AuthServices;
using Kentor.AuthServices.Metadata;
using Kentor.AuthServices.WebSso;
我在制作符合 RFC-7522 的示例时遇到问题。我拥有的是 IdentityServer4 (v2.2.0) as oAuth Authorization Server (.NET Core 2.0, Console Application) 和不同的 SAML2 IdP。现在我想使用 Saml Assertion 来验证用户。
作为灵感,我使用了这个 video,其中 Brock Allen 和 Dominick Baier 描述了如何设置 SAML2 处理程序。
但遗憾的是,我一开始就卡住了,我只想将该片段粘贴到我的代码中,但每次我都会遇到不同的编译错误(取决于我使用的 nuget)。不幸的是,我没有运气解决它们。
片段:
//IServiceCollection services
services.AddAuthentication().AddSaml2(options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.SPOptions.EntityId = new Saml2NameIdentifier(samlIdentityUrl);
var idp = new IdentityProvider(new EntityId(samlMetadataUrl), options.SPOptions)
{
SingleSignOnServiceUrl = new Uri(samlSignOnUrl),
Binding = Saml2BindingType.HttpRedirect
};
idp.SigningKeys.AddConfiguredKey(new X509Certificate2(certificate));
options.IdentityProviders.Add(idp);
});
常见的 Nugets:
- IdentityModel.Unoficial (2.8.1)
- IdentityServer4 (2.2.0)
- Microsoft.AspNetCore.All (2.0.3)
- Microsoft.IdentityModel.Tokens.Saml (5.2.4)
- Sustainsys.Saml2.AspNetCore2(见下文)
场景 #1:Sustainsys.Saml2.AspNetCore2 (0.24.0)
包 'Sustainsys.Saml2.AspNetCore2 0.24.0' 已使用“.NetFramework,Version=v4.6.1”恢复。this and this 问题中提到的内容。最重要的是,我几乎没有编译错误,可能会导致 '类型 'EntityId' 和 'SecurityKeyIdentifierClause' 在未引用的程序集中定义。'
场景 #2:Sustainsys.Saml2.AspNetCore2 (2.0.0-preview01)
缺少整个 Sustainsys 命名空间,它被替换为 Kentor.AuthServices。未找到参考 .AddSaml2(..)。
很好,我可以通过 更新 nugets 和导入 到以下状态来解决我的问题:
Nugets:
- IdentityServer4 (2.2.0)
- Microsoft.AspNetCore.All (2.0.3)
- Microsoft.IdentityModel.Token.Saml (5.2.4.)
- Sustainsys.Saml2 (2.0.0-preview01)
- Sustainsys.Saml2.AspNetCore2 (2.0.0-preview01)
进口:
using Microsoft.IdentityModel.Tokens.Saml2;
using Kentor.AuthServices;
using Kentor.AuthServices.Metadata;
using Kentor.AuthServices.WebSso;