曾几何时,我曾经 install Thinktecture.IdentityModel
,使用基本身份验证调用它以获取令牌,然后将其传递给 ajax 调用的标头到 Web API。
我只是试图这样做,它呕吐了。
上潜望镜!
未找到方法:与 ctor 签名不匹配(Fiddler 欢呼)。
与它工作的项目进行比较表明,所需的签名存在于版本 2.0.0.0 中,System.IdentityModel.Tokens.Jwt
但不再存在于版本 4.0.20622.1351 中
快,罗宾——去宾极!
有一个关于这个主题的 github 支持查询,在我们发现的评论中
最少特权于 1 月 27 日发表评论
AuthenticationHandler 不再是 Web API v2 的推荐方法,因为现在所有内容都是内置的 - 改为使用中间件。
不问问题,蚱蜢
这是一个确定的意见。他是图书馆的作者之一。对于任何需要提出问题的人来说,这也毫无帮助。
有人可以向我指出适当的介绍和教程链接,这样我就可以加入那些明智地点头并惊叹于这条评论禅宗般简洁的行列?
我正在使用 AuthenticationHandler 验证包含用户名和密码的 SQL Server 表。纯粹主义者请不要教我,有无数的企业不使用或不会使用第三方 OAUTH。我需要将用户名/密码对转换为可以在我的 Web API 方法上使用的会话令牌。就这样。我碰巧同意 OAUTH,但为此付费的人对统一身份验证不感兴趣,他们喜欢孤岛。
补充资料
我找到了一个关于整个身份验证的可公开访问的 PluralSight 课程。它是由编写 ThinkTecture.AuthenticationHandler 的人编写的,它作为最近变化的背景资料非常好。
在学习材料的过程中,他参考了另一个关于 MVC 的 PluralSight 课程,其中包含有关 OWIN(纯 API,即接口)和Katana(Microsoft 的 OWIN 实现)的更多信息。
在这一点上,我很清楚
- 出于各种充分的理由,发生了根本的架构变化。
- A
MessageHandler
不是进行身份验证的地方。 - 有一个名为 Thinktecture.IdentityModel.Owin.BasicAuthentication 的 NuGet 包,它被描述为 OWIN/Katana 应用程序中用于 HTTP 基本身份验证的 OWIN 中间件。
我对新形势的仍然模糊的理解表明,中间件包是我所需要的。NuGet 做到了,现在我必须提供一些代码来将中间件插入到 OWIN 中间件链中,并提供更多代码来实际验证凭据。据我所知,我需要在 Startup.Auth.cs 中执行此操作
public void ConfigureAuth(IAppBuilder app)
{
app.UseBasicAuthentication("some_realm", (id, secret) =>
{
if (id == secret) //should check database, but never mind right now
{
var claims = new List<Claim> {
new Claim(ClaimTypes.NameIdentifier, id),
new Claim(ClaimTypes.Role, "Foo") //this can come from db also
};
return Task.FromResult<IEnumerable<Claim>>(claims);
}
return Task.FromResult<IEnumerable<Claim>>(null);
});
假设到目前为止我已经做对了,我该如何使用它?我是否继续用 来装饰 Web API 方法[Authorize]
?
成功!几乎。
目前,来自我的测试客户端的请求导致我在线上设置的断点命中if (id == secret)
并且条件得到满足,因为 id 和 secret 包含我的测试代码发送的值。Claims 对象是按照上面的代码创建并适当返回的,但是测试客户端收到 401 Unauthorized。
这几乎可以肯定是由于未能创建主体对象。UserManager 和 IdentityModel 有一些业务,可以自定义它以使用我们自己的模式。