【问题标题】:How can I get Access_Token from Flurl如何从 Flurl 获取 Access_Token
【发布时间】:2017-08-11 21:20:12
【问题描述】:

我正在开发一个应用程序,我有一个使用Owin Token Bearer 的后端服务器Azure API 应用程序。我正在尝试登录到我的后端并像在我的网络客户端中一样获取令牌。我可以成功登录,但响应消息中没有令牌。我有这个代码

 string _url = ServerPath.Path + "/token";
 HttpResponseMessage message = await _url.PostUrlEncodedAsync(
     new {
         UserName = Username,
         Password = Password,
         grant_type = "password"
     }
);

任何帮助将不胜感激。

【问题讨论】:

  • 根据规范尝试小写 usernamepassword。这取决于服务器应用程序的宽容程度,也可能无关紧要。如果这不起作用,请详细说明“我可以成功登录”的含义。你的意思是这个调用返回一个 200 和空的身体吗?这听起来像是服务器端的错误。
  • 它返回显示我已成功登录的响应消息,我在该响应消息中寻找它的令牌...我在响应消息中找不到令牌返回
  • 如果您在通话结束时执行.ReceiveString(),您将获得响应正文作为字符串。如果还是看不到token,我认为是服务器端有问题。
  • 谢谢@Todd Menier。 .RecieveString() 有效。
  • 优秀。有一种更清洁的方法,我会在答案中提供它..

标签: azure owin azure-api-apps flurl


【解决方案1】:

您使用的身份验证方法返回标准OAuth 2.0 token response。令牌在您要返回的HttpResponseMessage 中,Flurl 的ReceiveJson 可以帮助您将其取出:

var response = await _url
    .PostUrlEncodedAsync(new
    {
        UserName = Username,
        Password = Password,
        grant_type = "password"
    })
    .ReceiveJson();

var token = (string)response.access_token;

请注意,我在这里使用了ReceiveJson 的非通用版本,它返回dynamic。您可以通过创建一个与整个响应主体的 JSON 结构匹配的类(称为 TokenResponse),使用 ReceiveJson<TokenResponse>(),并拥有一个强类型的响应对象来提取 access_token,从而使其更加健壮。

【讨论】:

    猜你喜欢
    • 2021-01-04
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2014-06-18
    相关资源
    最近更新 更多