【问题标题】:grant_type password requires client_id to be setgrant_type 密码需要设置 client_id
【发布时间】:2018-01-25 16:22:44
【问题描述】:

我正在使用 IdentityServer4 设置一个 asp.net core 2 web api,由于一些现有客户,我需要支持资源所有者密码凭据授予。我在获取令牌时遇到问题,因为它显示“未找到客户端标识符”。

这失败了……

Content-Type: application/x-www-form-urlencoded 
grant_type=password&username=myuser&password=mypassword

成功了……

Content-Type: application/x-www-form-urlencoded 
grant_type=password&username=myuser&password=mypassword&client_id=ro.client

为什么我需要添加 client_id 才能使其工作? OAuth 2.0 规范未指定需要它 - https://www.rfc-editor.org/rfc/rfc6749#section-4.3

【问题讨论】:

    标签: c# asp.net-core-2.0 identityserver4


    【解决方案1】:

    如果客户类型是保密的或客户是发给客户的 凭据(或分配的其他身份验证要求), 客户端必须按照所述向授权服务器进行身份验证 在第 3.2.1 节中。 - https://www.rfc-editor.org/rfc/rfc6749#section-4.3

    请求涉及模拟用户的客户端,并且 IdentityServer 始终需要知道是什么客户端发出请求,以便对其进行授权(例如,验证请求的范围,甚至可能对其进行身份验证)。

    我在这里使用 IdentityServer。我不知道我希望公开访问 ROPC 授权类型的任何情况。你呢?

    另外,请不要使用 ROPC 授权类型,它是 2018 年的花花公子:https://www.scottbrady91.com/OAuth/Why-the-Resource-Owner-Password-Credentials-Grant-Type-is-not-Authentication-nor-Suitable-for-Modern-Applications

    【讨论】:

    • 哈! 2018...我希望我能用这个借口。我们的客户很难切换到有线互联网而不是使用拨号......我是否希望公共访问 ROPC 授权类型?不,但我们没有公共 API,所以我们的业务有点不同。至于我的问题,OAuth 2 规范确实说客户端必须进行身份验证,但是规范中没有说发送 ROPC 请求时需要 client_id。那么,这只是 IdentityServer4 的要求吗?
    • 要进行身份验证,客户端需要标识自己。即使您没有提供秘密,它也需要隐式验证自己。考虑一下,除非您允许公开访问 ROPC 授权,否则您将始终需要某种客户端身份验证。但可以肯定的是,这是 IdentityServer 的要求。
    • 我和@DanH 在这个 :) 尝试将旧的 owin 应用程序移植到 dotnetcore,而旧客户端不发送 client_id,所以现在我也必须更新客户端...跨度>
    • 出于好奇,哪些 OWIN 库正在这样做?我知道 MS Katana 库包含 client_id(至少 OpenID Connect 库包含),纯 OAuth 库不是吗?
    猜你喜欢
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 2012-04-27
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多