如何为IdentityServer3

时间:2016-12-15 04:27:44

标签: c# asp.net-mvc identityserver3

我正在尝试使用IdentityServer3因此我正在查看官方示例。我创建了一个非常简单的授权服务器:

namespace SimpleIdentityServer
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            var options = new IdentityServerOptions
            {
                Factory = new IdentityServerServiceFactory()
                                .UseInMemoryClients(Clients.Get())
                                .UseInMemoryScopes(Scopes.Get())
                                .UseInMemoryUsers(Users.Get()),
                RequireSsl = false
            };
            app.UseIdentityServer(options);
        }
    }
}

这是我的记忆用户:

new Client
{
    ClientName = "MVC application",
    ClientId = "mvc",
    Enabled = true,
    AccessTokenType = AccessTokenType.Jwt,
    Flow = Flows.Implicit,
    ClientSecrets = new List<Secret>
    {
        new Secret("secret".Sha256())
    },
    AllowedScopes = new List<string>
    {
        "openId",
        "profile"
    },
    RedirectUris = new List<string>
    {
        "http://localhost:12261/"
    }
}

现在,我想使用前面提到的服务器来验证MVC应用程序的用户,所以我这样做了:

    public void Configuration(IAppBuilder app)
    {
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "Cookies"
        });
        app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
        {
            Authority = "http://localhost:47945/",
            ClientId = "mvc",
            RedirectUri = "http://localhost:12261/",
            ResponseType = "id_token",
            SignInAsAuthenticationType = "Cookies"
        });
    }

这是一个使用Authorize属性注释的示例控制器操作:

[Authorize]
public ActionResult About()
{
    ViewBag.Message = "Your application description page.";

    return View();
}

但是当我在我的mvc应用程序中回家/它时,它显示401错误,并且似乎(来自serilog)它甚至没有调用授权服务器。

1 个答案:

答案 0 :(得分:3)

我认为可能发生的是你的OWIN管道没有被执行。您是否可以尝试在Startup课程中设置断点,杀死IIS或IIS Express - 无论您使用哪一个 - 然后重新开始?

如果是这种情况,则IODC中间件不会捕获 HTTP 401响应,因此不会将您重定向到IdentityServer实例。

可能的解释是,在IIS上运行ASP.NET应用程序时,您没有包含启用OWIN的必要NuGet包。该套餐为Microsoft.Owin.Host.SystemWeb