使用JavaScript和IdentityServer的资源所有者凭据流 - 不允许?

时间:2015-09-24 13:44:52

标签: asp.net-web-api asp.net-core asp.net-core-mvc thinktecture-ident-server identityserver3

我有一个JS网站,试图通过传递用户名和密码来获取访问令牌。我还维护auth服务器,所以我认为JS客户端是可信的。我能用ASP.net 4.5.x做到这一点。但是当我尝试对IdentityServer执行相同操作时,我得到invalid_client。

我现在正在尝试使用ASP.net 5,我相信用作身份提供者的旧OWIN中间件不再受支持,并且当我们想成为身份时他们提倡使用IdentityServer提供商。

POST /connect/token HTTP/1.1
Host: localhost:59766
Content-Type: application/x-www-form-urlencoded

username=admin&password=pw&grant_type=password

我认为IdentityServer首先需要客户端信息,但这意味着我必须在网页(或本机移动应用程序)上公开client_secret,我相信这是不允许的,根据OAuth规范。

我们如何使用IdentityServer关闭客户端要求?

在IdentityServer的github上,我只看到收集客户端凭据以及用户名和密码的C#代码,以获取资源所有者凭据流here的访问令牌。什么是等效的原始HTTP请求?

我个人不在乎是否有其他应用试图冒充我的客户。它确实是用户的凭据,无论如何都可以访问任何内容。

1 个答案:

答案 0 :(得分:2)

在IdentityServer3中,客户端身份验证是必需的:如果请求中缺少客户端凭据,则无法验证令牌请求,无论您使用哪种授权类型(授权代码,刷新令牌,资源所有者密码)。

当然,这不符合规范,因为JS应用程序等公共应用程序不需要客户端身份验证,但我想这个要求是为了鼓励您使用隐式流程(https://tools.ietf.org/html/rfc6749#section-4.3.2)< / p>

如果您确实希望将ROPC与IdentityServer一起使用,则可以使用其他OAuth2参数传递客户端凭据:

POST /connect/token HTTP/1.1
Host: localhost:59766
Content-Type: application/x-www-form-urlencoded

client_id=id&client_secret=not_secret_at_all&username=admin&password=pw&grant_type=password&scope=read+write