我正在尝试使用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)它甚至没有调用授权服务器。
答案 0 :(得分:3)
我认为可能发生的是你的OWIN管道没有被执行。您是否可以尝试在Startup
课程中设置断点,杀死IIS或IIS Express - 无论您使用哪一个 - 然后重新开始?
如果是这种情况,则IODC中间件不会捕获 HTTP 401
响应,因此不会将您重定向到IdentityServer实例。
可能的解释是,在IIS上运行ASP.NET应用程序时,您没有包含启用OWIN的必要NuGet包。该套餐为Microsoft.Owin.Host.SystemWeb
。