尝试使用fiddler获取oauth令牌

时间:2014-04-16 10:05:37

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

我一直在关注多元化的Scott Allen的ASP.NET MVC 5基础知识,并且可以使用简单的HTML页面成功请求令牌,但现在需要尝试使用fiddler来执行此操作。我需要使用fiddler测试它的原因是,这实际上是我的apu被调用的方式。正在写一个ios设备应用程序,我必须做api文件。

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

HEADER:

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

BODY:     grant_type =密码:

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

我得到了400条错误的请求。

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

我做错了什么?

修改

即使尝试了#34; username = username& password = password"仍然没有快乐

修改

哎呀,将grant_type放在错误的地方。这需要在身体中:

grant_type:密码&安培;用户名:用户名和安培;密码:密码

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

  

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

我会让帖子保持活跃状态​​,因为这可能是一个红色的鲱鱼。

6 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:4)

我正在排除相同的错误消息

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

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

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

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

希望这有帮助。

答案 2 :(得分:3)

在小提琴手中,你可以写作 主持人:localhost:17271 内容长度:81 内容类型:application / x-www-form-urlencoded;字符集= UTF-8

在RequestBody中你可以写 的 grant_type =密码&安培;用户名=爱丽丝&安培;密码= password123&安培; RESPONSE_TYPE =记号

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

答案 3 :(得分:1)

我看到的一个问题是,您将用户名和密码作为Json字符串放在Request Body中。它应该只是没有引号的文本:

grant_type =密码&安培;用户名=用户名和安培;密码=密码

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

答案 4 :(得分:1)

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

  1. 在Visual Studio 2015中创建新的MVC Web API 2项目
  2. 确保将身份验证设置为单个用户帐户(假设这是您想要的)
  3. 项目加载后,构建项目并启动Web应用程序以确保其运行
  4. 你应该得到默认的" ASP.NET入门......"页面顶部带有导航链接" Home"和" API"。
  5. 此时我倾向于改变" DefaultConnection"在我的Web.config文件中指向一个实际的SQL Server,我将在其中托管ASP.NET标识表,但您不需要默认使用localDb。

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

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

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

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

      User-Agent:Fiddler Content-Type:application / json; charset = UTF-8

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

      {   "电子邮件":" youremail@account.com",   "密码":" YourPassw0rd!",   " ConfirmPassword":" YourPassw0rd!" }

    5. 在您的网站运行时点击右上角的执行按钮

    6. 如果成功,您应该在Fiddler4的左侧看到200响应,确认帐户控制器API操作注册被称为新用户已成功注册。

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

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

      User-Agent:Fiddler Content-Type:application / json; charset = UTF-8

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

      grant_type =密码&安培; username=your@account.com&!密码= PASSW0RD

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

      http://localhost:49598/Token

    11. 双击响应以打开Fiddler4右侧的Inspector选项卡,该选项卡应以JSON格式显示授权信息(您还可以通过单击' Raw&将其视为原始信息#39;标签)。

    12. 寻找' access_token ='将拥有您需要制作的访问令牌的行" bearer"输入请求。

    13. 通俗地说,这就是现在发生的事情:

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

      湾对API端点发出的任何/所有请求都是使用承载令牌类型完成的,并且会在请求的标头中设置。

      ℃。您传入收到的身份验证令牌,并经过验证并处理您的请求。

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

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

      *注意:我将授权令牌的到期时间保留为30分钟

      现在好在Fiddler4中使用该令牌......

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

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

        User-Agent:Fiddler 主持人:localhost:49598 授权:承载your_very_long_auth_token_here

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

        http://localhost:49598/api/values

      4. 点击执行按钮,如果一切都成功,你应该看到左边的200响应:

        200 HTTP localhost:49598 / api / values

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

      6. 这里总结了如何使用Fiddler4来测试Oauth2与Web API 2.希望有人发现这有用,如果你发现任何错误让我知道你的评论,我会更新这个答案。

答案 5 :(得分:0)

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

我不知道只需将凭据传递给令牌服务器即可获得{{1}}的快捷方式。