0

我们有一个现有的 SSO 应用程序,其登录表单用于验证 ping federate。

我正在尝试将这种相同的 SSO 机制与 angular cli 11 一起使用。

我已经到了从 Pingfederate 返回的开放令牌的地步。我想要做的不是我们设置我的 ASP.NET 核心应用程序来接受这个令牌,验证它,并授予我访问其中声明的权限。

在一个较旧的 MVC 应用程序中,这个令牌是使用一个看起来只是密码的 opentoken 库来解密的。

如何配置我的 .net core 3.1 应用程序以接受和验证这个开放令牌?

这是我到目前为止所拥有的:

services.AddAuthentication()
            .AddOAuth("urn:ietf:params:oauth:grant-type:saml2-bearer", opt =>
            {
                opt.ClientId = Configuration["PingOpenToken:ClientId"];
                opt.ClientSecret = Configuration["PingOpenToken:ClientSecret"];
            });

其中客户端密码与我们用来解密令牌的密码相同。我不知道 Client Id 值应该是什么。

来自urn:ietf:params:oauth:grant-type:saml2-bearerThis ping 文档

我假设我要将我在授权标头中拥有的开放令牌放置为bearer {token}.

只是为了验证我的 pingfederate 配置并查看是否需要打开其他任何东西,在我的协议设置下,我有:

  • 启用 OAuth 2.0 授权服务器:false
  • IdP SAML 2.0 支持:真
  • SP SAML 2.0 支持:真

如果我需要打开 oAuth 2.0,我不知道如何配置它。

4

1 回答 1

0

在与 PingFederate 的几个人通话后,我想出了如何配置和使用 PF oauth,而不是使用他们的 opentoken 实现。

要点是用户被发送到 SSO,当他们回到我的 Angular 应用程序时,他们点击了一个带有令牌的 url。然后,我使用令牌对 PF 进行 API 调用,以获取他们的 oauth 令牌。

然后在我的 API 中,我对 azure 广告服务主体和 PF 进行了双重配置,如下所示:

services.AddAuthentication()
            .AddJwtBearer(ApiConstants.AuthenticationSchemes.AzureBearerToken, opt =>
            {
                opt.Audience = Configuration["AzureAd:ResourceId"];
                opt.Authority = $"{Configuration["AzureAd:Instance"]}{Configuration["AzureAd:TenantId"]}";
                opt.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = true,
                    ValidateAudience = true,
                    ValidateLifetime = true,
                    ValidateIssuerSigningKey = false
                };
            })
            .AddJwtBearer(ApiConstants.AuthenticationSchemes.PingBearerToken, opt =>
            {
                opt.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = true,
                    ValidateAudience = true,
                    ValidateLifetime = true,
                    ValidateIssuerSigningKey = true,
                    ValidIssuer = Configuration["PingFederate:JwtIssuer"],
                    ValidAudience = Configuration["PingFederate:JwtAudience"],
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["PingFederate:JwtSymmetricKey"]))
                };
            });

        services.AddAuthorization(options =>
        {
            options.DefaultPolicy = new AuthorizationPolicyBuilder()
                .RequireAuthenticatedUser()
                .AddAuthenticationSchemes(ApiConstants.AuthenticationSchemes.PingBearerToken, 
                    ApiConstants.AuthenticationSchemes.AzureBearerToken)
                .Build();
        });

我的两个常量值是“azure”和“ping”。

于 2021-03-29T16:26:11.793 回答