【问题标题】:trying to get a oauth token using fiddler尝试使用提琴手获取 oauth 令牌
【发布时间】:2014-04-16 10:05:36
【问题描述】:

我一直在关注 Scott Allen 在复数视觉上的 ASP.NET MVC 5 Fundamentals,并且可以使用简单的 HTML 页面成功请求令牌,但现在需要尝试使用 fiddler 执行此操作。我需要使用 fiddler 对其进行测试的原因是,这本质上就是调用我的 apu 的方式。正在编写一个 ios 设备应用程序,我必须做 api 部分。

所以,我在fiddler中输入了followdin:

标题:

 POST http://localhost:53140/token HTTP/1.1
    Content-Type: application/json
    Host: localhost:53140
    Content-Length: 50

身体: grant_type=密码:

{"userName":"something",
"password":"password"}

我收到 400 - 错误请求。

我已将内容类型更改为:application/x-www-form-urlencoded 但仍然是 400。

我做错了什么?

编辑

即使尝试了“username=username&password=password”仍然没有乐趣

编辑

糟糕,grant_type 放错地方了。这需要在体内:

grant_type:password&username:username&password:password

现在我得到的用户名或密码无效:

{"error":"invalid_grant","error_description":"用户名或 密码不正确。"}

我将保持帖子处于活动状态,因为这可能是一个红鲱鱼。

【问题讨论】:

  • 在“grant_type:password&username:username&password:password”中,有“:”,应该是“=”,如“grant_type=password&username=username&password=password”
  • 另外,在 fiddler 中,确保在 grant_type=password&username=username&password=password 之后没有空格或换行符。
  • 请修正您帖子中的错别字;现在这显然是不正确的,而且您正在派人去寻找您遇到的问题。
  • EricLaw,你看不到编辑吗?

标签: asp.net-mvc api asp.net-web-api fiddler


【解决方案1】:

在 fiddler 中,确保在 grant_type=password&username=username&password=password 之后没有空格或换行符。

【讨论】:

  • 这可能是一个旧线程,但经过数小时的尝试与 OP 相同,对我来说这很简单。谢谢
【解决方案2】:

我正在解决同样的错误消息

{"error":"invalid_grant","error_description":"The user name or password is incorrect."}

我自己尝试这个tutorial。似乎持久化到本地数据库的UserName 实际上是电子邮件地址,而不是调用/api/Account/Register Web API 时JSON 有效负载中提供的UserName。您可以通过对 [AspNetUsers] 表运行 T-SQL 查询来验证这一点。 (如果您使用的是 LocalDb 数据库,您可以使用 Show All Files 打开位于项目的 App_Data 中的数据库。)

请注意,一旦将实际用户名确认为电子邮件地址,则在发布/api/Token 请求时,电子邮件地址(可能还有您的密码)必须进行 URL 编码。
例如:

grant_type=password&username=Alice%40yourdomain.com&password=_Password123

希望这会有所帮助。

【讨论】:

  • 很好,这已经困扰了我半个小时了 :)
  • 是的,用户名必须是电子邮件地址
【解决方案3】:

在提琴手你可以写 主机:本地主机:17271 内容长度:81 内容类型:application/x-www-form-urlencoded; charset=UTF-8

在 RequestBody 你可以写 grant_type=password&username=Alice&password=password123&response_type=token

希望有人帮助它,因为我的问题是通过这种类型的请求体解决的

【讨论】:

    【解决方案4】:

    这就是我使用 Fiddler4 的方法(本指南假设您从头开始):

    1. 在 Visual Studio 2015 中创建新的 MVC Web API 2 项目
    2. 确保将身份验证设置为单个用户帐户(假设这是您想要的)
    3. 加载项目后,构建项目并启动 Web 应用程序以确保其运行
    4. 您应该会获得默认的“ASP.NET 入门...”页面,其中导航链接位于“主页”和“API”顶部。

    此时,我倾向于将 Web.config 文件中的“DefaultConnection”更改为指向一个实际的 SQL Server,我将在其中托管 ASP.NET 标识表,但默认情况下您不需要只使用 localDb .

    1. 启动 Fiddler4,然后点击右侧的 Composer 选项卡

    2. 将请求类型更改为“POST”,然后将 URL 更改为您之前运行的本地网站的 URL(VS Web API 2 项目),例如:

      http://localhost:49598/api/Account/Register

    3. 将标题文本更改为以下内容:

      用户代理:提琴手 内容类型:application/json;charset=UTF-8

    4. 在请求正文中,您需要编写 JSON 数据,这将是您注册的帐户,例如:

      { "电子邮件": "youremail@account.com", "密码": "YourPassw0rd!", “确认密码”:“您的密码!” }

    5. 随着您的网站运行,点击右上角的执行按钮

    6. 如果成功,您应该会在 Fiddler4 的左侧看到 200 响应,确认调用了 Account Controller API 操作 Register 新用户已成功注册。

    7. 现在您可以通过请求授权令牌来测试您的用户帐户。在 Fiddler4 中清除 Request body 的内容,然后根据需要将类型更改为 POST。

    8. 再次将标题文本更改为以下内容:

      用户代理:提琴手 内容类型:application/json;charset=UTF-8

    9. 在请求正文中粘贴以下内容(显然更改您帐户的值)

      grant_type=password&username=your@account.com&password=Passw0rd!

    10. 再次点击执行,您应该会在 Fiddler4 的左侧看到 200 响应:

      http://localhost:49598/Token

    11. 双击响应打开 Fiddler4 右侧的 Inspector 选项卡,该选项卡应以 JSON 格式显示授权信息(您也可以通过单击“原始”选项卡将其视为原始信息) .

    12. 查找“access_token=”行,该行将包含发出“不记名”类型请求所需的访问令牌。

    用外行的话来说,这就是现在发生的事情:

    一个。您进行身份验证并获得身份验证令牌。

    b.对 API 端点发出的任何/所有请求都使用不记名令牌类型完成,并且在请求的标头中设置。

    c。您传入您收到的身份验证令牌,并对其进行验证并处理您的请求。

    d。您应该确保您的 Web API 2 端点在方法和/或类上具有 [Authorize] 装饰,以确保这些区域是安全的。

    e。如果您的身份验证令牌已过期(在 App_Start\Startup.Auth.cs 类 'AccessTokenExpireTimeSpan'... 中设置),那么您将需要处理此问题,例如我的应用程序调用一个需要授权的哑方法,如果客户端失败AngularJS 代码将用户重定向到登录屏幕,有效用户可以通过登录请求另一个身份验证令牌。

    *注意:我将身份验证令牌的到期时间设置为 30 分钟

    现在可以在 Fiddler4 中使用该令牌...

    1. 启动 Fiddler4 并在右侧的 Composer 选项卡中将类型更改为 GET(如果需要,请清除请求正文的内容)

    2. 将标题文本更改为以下内容:

      用户代理:提琴手 主机:本地主机:49598 授权:承载 your_very_long_auth_token_here

    3. 将 url 更改为旧的 api/values 端点:

      http://localhost:49598/api/values

    4. 点击执行按钮,如果一切成功,您应该会在左侧看到 200 响应:

      200 HTTP 本地主机:49598 /api/values

    5. 双击此响应,检查器选项卡应打开并显示 JSON 响应

    到此结束如何使用 Fiddler4 通过 Web API 2 测试 Oauth2。希望有人发现这很有用,如果您发现任何错误,请在您的 cmets 中告诉我,我会更新此答案。

    【讨论】:

      【解决方案5】:

      我看到的一个问题是,您似乎将用户名和密码作为 Json 字符串放入请求正文中。它应该只是不带引号的文本:

      grant_type=password&username=UserName&password=PassWord

      然后确保你有内容类型:application/x-www-form-urlencoded

      【讨论】:

        【解决方案6】:

        我不熟悉 Scott 的课程,但通常对于 OAuth2,您使用凭据向 authorization server 发出 GET 请求,然后它会为您提供 AuthorizationCode,然后您将其连同其他一些内容一起发布到token server 获取您的令牌。

        我不知道您可以通过将凭据传递给令牌服务器来获得token 的快捷方式。

        【讨论】:

        • 嗨,Darrel,这是使用新的 Web API 2 模板。我只需要一个令牌,这样我就可以验证用户。我还不关心授权服务器.. :-)
        猜你喜欢
        • 2017-07-27
        • 2021-02-09
        • 2020-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多