ASP.NET Rest Service-持久化令牌



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

因此,我们正在创建一些新的服务,并使用REST,构建在Web API 2.0中。因此,我们试图在保持简单的用户/开发者密钥身份验证还是使用oAuth/Token身份验证之间做出决定。似乎许多较新的服务都使用oAuth。我们不是一家有公共用户登录的公司,在我们将客户设置在服务器上之前,我们已经与他们建立了业务关系,所以我不确定我们是否需要走这条路。在我们的情况下,我们应该过渡到oAuth有什么具体的原因吗?

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

如果您的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());
    }
}

有时你必须指定内容类型,在我的情况下我没有,但一些搜索可以为你的特定设置解决所有问题。

我不确定我们是否需要走那条路。在我们的情况下,我们应该过渡到oAuth有什么具体的原因吗?

这应该会有所帮助https://stackoverflow.com/a/7562407/6128276

代币是如何持久存在的?

在Web API中,令牌有一个到期日期,但您可以通过使用RefreshTokens来持久化令牌。

它在内存中吗?如果我重新启动服务器怎么办?

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

最新更新