我一直在关注多元化的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":"用户名或 密码不正确。"}
我会让帖子保持活跃状态,因为这可能是一个红色的鲱鱼。
答案 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的方式(本指南假设您从头开始):
此时我倾向于改变" DefaultConnection"在我的Web.config文件中指向一个实际的SQL Server,我将在其中托管ASP.NET标识表,但您不需要默认使用localDb。
启动Fiddler4,然后单击右侧的Composer选项卡
将请求类型更改为' POST'然后将URL更改为您之前运行的本地网站的URL(VS Web API 2项目),例如:
将标题文字更改为以下内容:
User-Agent:Fiddler Content-Type:application / json; charset = UTF-8
在请求正文中,您需要编写您正在注册的帐户的JSON数据,例如:
{ "电子邮件":" youremail@account.com", "密码":" YourPassw0rd!", " ConfirmPassword":" YourPassw0rd!" }
在您的网站运行时点击右上角的执行按钮
如果成功,您应该在Fiddler4的左侧看到200响应,确认帐户控制器API操作注册被称为新用户已成功注册。
现在,您可以通过请求授权令牌来测试您的用户帐户。清除Fiddler4中Request请求的内容,然后根据需要将类型更改为POST。
再次将标题文本更改为以下内容:
User-Agent:Fiddler Content-Type:application / json; charset = UTF-8
在请求正文中粘贴以下内容(显然更改了您帐户的值)
grant_type =密码&安培; username=your@account.com&!密码= PASSW0RD
再次点击执行,您应该在Fiddler4的左侧看到200响应:
双击响应以打开Fiddler4右侧的Inspector选项卡,该选项卡应以JSON格式显示授权信息(您还可以通过单击' Raw&将其视为原始信息#39;标签)。
寻找' access_token ='将拥有您需要制作的访问令牌的行" bearer"输入请求。
通俗地说,这就是现在发生的事情:
一个。您进行身份验证并获取身份验证令牌。
湾对API端点发出的任何/所有请求都是使用承载令牌类型完成的,并且会在请求的标头中设置。
℃。您传入收到的身份验证令牌,并经过验证并处理您的请求。
d。您应该确保Web API 2端点在方法和/或类上具有[Authorize]装饰,以确保这些区域是安全的。
即如果您的身份验证令牌已过期(在App_Start \ Startup.Auth.cs类中设置' AccessTokenExpireTimeSpan' ...)那么您将需要处理此问题,例如我的应用程序调用需要授权的哑方法,如果如果客户端失败,AngularJS代码会将用户重定向到登录屏幕,有效用户可以通过登录请求其他身份验证令牌。
*注意:我将授权令牌的到期时间保留为30分钟
现在好在Fiddler4中使用该令牌......
启动Fiddler4并在右侧的Composer选项卡中将类型更改为GET(如果需要,清除Request Body的内容)
将标题文字更改为以下内容:
User-Agent:Fiddler 主持人:localhost:49598 授权:承载your_very_long_auth_token_here
将网址更改为旧的api / values端点:
点击执行按钮,如果一切都成功,你应该看到左边的200响应:
200 HTTP localhost:49598 / api / values
双击此响应,应打开检查器选项卡,显示JSON响应
这里总结了如何使用Fiddler4来测试Oauth2与Web API 2.希望有人发现这有用,如果你发现任何错误让我知道你的评论,我会更新这个答案。
答案 5 :(得分:0)
我不熟悉Scott的课程,但通常对于OAuth2,您使用凭据向authorization server
发送GET请求,然后为您提供AuthorizationCode
,然后您将发布一些token server
其他内容到token
以获取您的令牌。
我不知道只需将凭据传递给令牌服务器即可获得{{1}}的快捷方式。