ASP.NET Rest服务 - 持久化令牌

时间:2016-03-31 14:43:34

标签: asp.net rest oauth asp.net-web-api2

到目前为止,我们一直在使用SOAP服务,我们正在创建一些新服务并使用REST。我们在SOAP标头中使用了基本用户{Guid} /开发人员密钥{Guid}身份验证。

因此,我们正在创建一些新服务,并且我们正在使用REST,在Web API 2.0中构建。因此,我们决定在保持简单的用户/开发人员密钥身份验证或使用oAuth / Token身份验证之间做出决定。似乎许多新服务都使用oAuth。我们不是一家公共用户登录的公司,我们已经在我们的服务器上建立了业务关系,因此我不确定是否需要走这条路。在我们的情况下,我们是否应该转向oAuth?

另外,如果我去oAuth,令牌如何持续存在。我正在阅读一些示例,看起来Web API已经使用OWIN构建了很多。我看到令牌是如何生成的,但我不认为我理解这个过程。它是如何持续存在的?它在内存中,如果我重新启动服务器怎么办?我们考虑将其存储在我们的用户记录中,但后来我们想知道为什么要使用它,如果我们只是将它与用户名和密码一起存储。

2 个答案:

答案 0 :(得分:0)

  

我不确定我们是否需要走那条路。在我们的情况下,我们是否应该转向oAuth?

这应该有助于https://stackoverflow.com/a/7562407/6128276

  

令牌如何持续存在?

在Web API中,令牌有一个到期日期,但您可以使用RefreshTokens来保留令牌。

  

是否在内存中,如果我重新启动服务器该怎么办?

如果重新启动服务器,访问令牌不会发生任何事情,因为它永远不会存储在服务器上,验证所需的一切都在访问令牌中。将令牌发送到服务器后,它会使用计算机密钥对其进行解密并恢复用户身份(在同一台计算机上提供授权和资源服务器)。

答案 1 :(得分:0)

如果您可以从外部访问API,那么您应该使用OAuth保护它们(就像在端点上使用[Authorize]装饰器一样)。

一旦您实施了OAuth,您就可以使用授权类型的密码并传递您已经在SOAP标头中传递的类似凭据,这样您就不会向客户重新发布一堆凭据以使用新的API端点。

在.Net端,一旦您从OAuth服务获得持有者令牌,您就需要存储该令牌并在每次调用API时将其传递到授权标头中。

在C#中(在获得令牌之后)

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(<FQDN OF YOUR ENDPOINT>);
req.Method = "GET";
req.Headers["Authorization"] = "Bearer " + <TOKEN YOUR GOT FROM OAUTH>;
try
{
    HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
    if (resp.StatusCode == HttpStatusCode.OK)
    {
        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(<RETURN TYPE>));
        <YOUR OBJECT> = (<RETURN TYPE>)ser.ReadObject(resp.GetResponseStream());
    }
}

有时你必须指定内容类型,在我的情况下我没有,但是一些搜索可以使你的具体设置完全理顺。