OAuth2.0方法的返回类型(C#)

时间:2017-10-05 10:10:11

标签: c# json rest oauth-2.0 json.net

我正在创建一个C#应用程序,它进行REST调用并使用OAuth2.0身份验证。

对于OAuth2.0,过程是通过POST获取令牌,提供client_id,client_secret和grant_type。

此后进行GET调用时,需要在标题字段中提供从POST返回的标记。

所以,这提出了两个问题:

  1. 在POST方法中获取令牌,返回一个包含多个属性(包括令牌和超时时间)的Json。因为它是必需的令牌,JsonConvert( var token = JsonConvert.DeserializeObject>(responseJson)[“access_token”]。ToString(); )用于引入此变量并将变量映射到字符串。并且该方法将此变量作为字符串返回。对于请求令牌,使用字符串作为函数的返回类型是否正确?
  2. 在从REST服务调用获取数据的GET方法中,使用搜索条件传入令牌,这将返回Json结果。 JsonConvert.DeserializeObject<>用于将此映射到.NET对象。该功能的回报应该是什么?它不是字符串,因为它包含多个变量。

2 个答案:

答案 0 :(得分:1)

我建议你创建2个班级。一个用于您的令牌,另一个用于响应您的来电。

实际令牌不是初始调用中唯一重要的位,其类型以及令牌过期时也很重要,因此您知道要创建哪种授权标头(很可能是 Bearer )和何时申请新令牌或刷新使用中的令牌。

因此,首先使用像Postman这样的客户端来查看响应,以便您可以在C#类中镜像它们。

获得令牌类后,转到下一个班级。

您当然可以做其他事情,利用"动态"

你的电话可能如下:

JsonConvert.DeserializeObject<dynamic>(responseString);

这样您就不必为返回类型创建类,但我仍然会推荐其他方法。

对于第二个问题,返回类型将是您为反序列化器指定的任何内容。

让我们以令牌为例:

public sealed class TokenModel
    {
        public string access_token { get; set; }

        public string token_type { get; set; }

        public int expires_in { get; set; }
    }

然后您获取该数据的调用如下所示:

var tokenModel = JsonConvert.DeserializeObject<TokenModel>(responseJson);

答案 1 :(得分:0)

问题1:是的,您可以将令牌存储为字符串。没问题。

问题2:取决于您的设置方式。但是,通常会在Authorization标头中添加令牌而不是请求正文。从请求返回的结果不应包含其自身的令牌。我想这是一个Json对象,那么你只需要一个POCO c#类来允许它序列化。

例如,结果返回是json:

{
  "Property1": "Value1",
  "Property2": "Value2"
}

然后你的课将

 public class ReturnResult
    {
        [JsonProperty("Property1")]
        public string Property1 { get; set; }

        [JsonProperty("Property2")]
        public string Property2 { get; set; }
    }