c# - Startup中IdentityServer3.Admin的配置

标签 c# identityserver3

我正在试用 IdentityServer3.Admin 测试版 ( https://github.com/IdentityServer/IdentityServer3.Admin ),但在设置时遇到了一些问题,而且似乎找不到任何指导。

我已经设置了 IdentityManager 项目,所以我将其用作目前为止的指南,但 IdentityAdminServiceFactory 似乎缺少像 IdentityManagerServiceFactory 那样的配置方法。

这是我目前拥有的 Startup.cs 文件中的代码。非常感谢收到任何帮助!

谢谢。

        app.Map("/admin", adminApp =>
        {
            var factory = new IdentityAdminServiceFactory();
            //factory.Configure() or something would go here???

            adminApp.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = "Cookies"
            });

            adminApp.UseWsFederationAuthentication(new WsFederationAuthenticationOptions
            {
                MetadataAddress = ConfigurationManager.AppSettings["AzureADMetadataEndpoint"],
                Wtrealm = ConfigurationManager.AppSettings["AzureADApplicationId"],
                SignInAsAuthenticationType = "Cookies",
                Notifications = new WsFederationAuthenticationNotifications
                {
                    SecurityTokenValidated = ctx =>
                    {
                        var roleClaim = new Claim("role", "IdentityManagerAdministrator");
                        ctx.AuthenticationTicket.Identity.AddClaim(roleClaim);
                        return Task.FromResult(0);
                    }
                }
            });

            adminApp.UseIdentityAdmin(new IdentityAdminOptions
            {
                Factory = factory,
                AdminSecurityConfiguration = new AdminHostSecurityConfiguration
                {
                    HostAuthenticationType = "Cookies",
                    NameClaimType = ClaimTypes.Name,
                    RoleClaimType = "role",
                    AdminRoleName = "IdentityManagerAdministrator"
                }
            });
        });

最佳答案

好的,感谢 Twitter 上一位贡献者的帮助,我已经解决了这个问题。因此,对于遇到同样问题的任何其他人,这就是我的工作方式。

我还必须安装第二个包 IdentityServer3.Admin.EntityFramework。在 github 上的那个 repo 中,还有一个示例项目 ( https://github.com/IdentityServer/IdentityServer3.Admin.EntityFramework/tree/master/source/Host )

使用该代码作为指导,我实现了自己的 IdentityManagerAdminService 以及工厂的扩展方法,其中 "IdServer3" 是我到我的 ID Server DB 的连接字符串我的 Web.config

public class IdentityAdminManagerService : IdentityAdminCoreManager<IdentityClient, int, IdentityScope, int>
{
    public IdentityAdminManagerService() 
        : base("IdServer3")
    {
    }
}

public static class IdentityAdminManagerServiceExtensions
{
    public static void Configure(this IdentityAdminServiceFactory factory)
    {
        factory.IdentityAdminService = new Registration<IIdentityAdminService, IdentityAdminManagerService>();
    }
}

现在,在我的 Startup.cs 文件中,我有以下内容,当我点击 ID 服务器上的 /admin 路径时,它按预期工作。请注意,WsFederationAuthentication 部分不是必需的。我正在使用 Azure Active Directory 来保护管理部分,这就是我在那里设置它的原因。

        app.Map("/admin", adminApp =>
        {
            var factory = new IdentityAdminServiceFactory();
            factory.Configure();

            adminApp.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = "Cookies"
            });

            adminApp.UseWsFederationAuthentication(new WsFederationAuthenticationOptions
            {
                MetadataAddress = ConfigurationManager.AppSettings["AzureADMetadataEndpoint"],
                Wtrealm = ConfigurationManager.AppSettings["AzureADApplicationId"],
                SignInAsAuthenticationType = "Cookies",
                Notifications = new WsFederationAuthenticationNotifications
                {
                    SecurityTokenValidated = ctx =>
                    {
                        var roleClaim = new Claim("role", "IdentityManagerAdministrator");
                        ctx.AuthenticationTicket.Identity.AddClaim(roleClaim);
                        return Task.FromResult(0);
                    }
                }
            });

            adminApp.UseIdentityAdmin(new IdentityAdminOptions
            {
                Factory = factory,
                AdminSecurityConfiguration = new AdminHostSecurityConfiguration
                {
                    HostAuthenticationType = "Cookies",
                    NameClaimType = ClaimTypes.Name,
                    RoleClaimType = "role",
                    AdminRoleName = "IdentityManagerAdministrator"
                }
            });
        });

关于c# - Startup中IdentityServer3.Admin的配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41745314/

相关文章:

c# - 两个排序整数数组的快速交集

c# - 如何从此类中的委托(delegate)访问类的实例方法

c# - 在 OWIN/Katana 身份验证管理器中使用 HttpPost 进行注销

owin - Service Fabric Stateless Identity Server 3 服务在负载下失败

c# - 从 SQL 数据库中检索 varbinary 数据字段

c# - 将 SQL Server Express 表迁移到 SQL Server 数据库

c# - 以编程方式将 XLS 转换为 XLSB?

javascript - 无需用户的 IdSrv3 身份验证

asp.net-identity - 从 IdentityServer3 迁移到 Azure Active Directory B2C

asp.net-mvc-4 - 使用 nonce 为登录页面添加书签