如何使用 auth0 自定义 api 发出用户名密码请求,出现错误“不支持的授权类型:密码”错误

Posted

技术标签:

【中文标题】如何使用 auth0 自定义 api 发出用户名密码请求,出现错误“不支持的授权类型:密码”错误【英文标题】:How to make a username password request with auth0 custom api, getting error "unsupported grant type: password" error 【发布时间】:2017-05-28 08:27:58 【问题描述】:

我尝试使用 auth0 邮递员模板使用用户名和密码发出身份验证请求,我得到了一个 unsupported grant type: password error。我做错了什么?

var client = new RestClient("https://test.auth0.com/oauth/token");
var request = new RestRequest(Method.POST);
request.AddHeader("postman-token", "abc");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddParameter("application/x-www-form-urlencoded", "grant_type=password&client_id=foo&audience=&username=test&password=test&scope=openid%20email%20picture%20nickname", ParameterType.RequestBody);

【问题讨论】:

此功能最初是作为 OAuth 2.0 API Authorization 功能的一部分发布的;您可以尝试检查您是否在高级帐户设置中启用了此功能。如果这不能解决问题,您应该提供有关您的帐户和客户端设置的更多信息。 好的,现在我收到Authorization server not configured with default connection 错误 - 在 adv 设置中启用 API 有什么作用?我不是已经可以访问 API 了吗? 您可以在General选项卡中配置默认​​连接;查看Execute the Resource Owner Password Grant 文档了解更多信息。 OAuth 2.0 API 授权适用于您想使用 Auth0 颁发访问令牌,然后您自己的 API 可以使用这些令牌做出授权决策。 【参考方案1】:
    登录 Auth0 仪表板 转到帐户设置(您的用户名右上方) 在常规选项卡上向下滚动到 API Authorization Settings 部分 Default Audience 将是您的 API 标识符(如果您有 API) Default Directory 将是您的连接,例如数据库连接名称

在您对 oauth/token 的 POST 中不包括受众(如果您在上面指定了默认值)。

一定很喜欢 Auth0 如何让身份验证变得简单而痛苦地同时进行。

请参阅下面的屏幕截图作为参考。

【讨论】:

感谢@the-muffin-man,这很有魅力。顺便说一句,我的错误略有不同,它是Authorization server not configured with default connection @sameera207 我并不感到惊讶。 Auth0 似乎相对频繁地更改/更新他们的 UI。随时更新我的​​答案。 如果我有两个连接怎么办?似乎如果我将默认目录设置为一个连接,另一个连接将不起作用。我应该如何解决这个问题? 我认为这只是一个默认值,所以如果您不指定连接,则使用默认值。所以在你的情况下,我相信你想在你的 POST 中发送值。我不确定 POST 中的变量名称是什么或您如何定义它。【参考方案2】:

转到默认应用>设置>

在设置底部,点击显示高级设置

选择授权类型选项卡

勾选默认不勾选的密码

将请求发布到 *//oauth/token 并且它可以工作

【讨论】:

这也是必须的,因为默认情况下是不允许的。确实。【参考方案3】:

这些是我为解决这个确切问题而采取的确切步骤

使用桌面浏览器登录 在 UI 的右上角,点击点击用户名,设置

向下滚动到 API 授权设置

在默认受众和默认目录中输入有效值。

例如,对我来说,我一直在使用锁定屏幕,并且已经设置了我在客户端应用程序中设置的默认受众,并且一切正常。

我也已经设置了一个 Connections > Database,名称为 Username-Password-Authentication。

这是完成上述操作后使用邮递员集合的屏幕截图,在撰写本文时,该集合包含在此处

https://app.getpostman.com/run-collection/2a9bc47495ab00cda178

这里引用了

https://auth0.com/docs/api/authentication#code-samples

【讨论】:

以上是关于如何使用 auth0 自定义 api 发出用户名密码请求,出现错误“不支持的授权类型:密码”错误的主要内容,如果未能解决你的问题,请参考以下文章

Auth0 Laravel:验证令牌并获取用户信息

Auth0 中自定义 API 的优势是啥?

集成 Auth0 自定义数据库和无密码

Spring Security:未调用自定义 UserDetailsS​​ervice(使用 Auth0 身份验证)

从 API 中访问 Auth0 登录用户?

如何将 django rest api 中的用户与 Auth0 同步