关于api:如何使用OAW客户端凭据开始使用OWIN Oauth来保护WebApi?

How to start with OAuth Client Credentials to protect WebApi using OWIN Oauth?

我是Oauth 2.0的新手。

我已经相当清楚地阅读了OAuth2.0文档,并且看到了四种获取授权的方法。

Types of obtaining authorization:

1
2
3
4
1.Implicit Grant
2.Resource Owner Password Credentials Grant
3.Client Credentials Grant
4.Authorization Code Grant

在我的例子中,我有客户机应用程序、资源所有者、资源服务器和授权服务器。

资源服务器是资源所有者使用其凭据注册的网站。

客户端应用程序是注册到资源服务器并获取客户端应用程序凭据以供将来访问的第三方网站。

授权服务器检查客户端应用程序的客户端凭据,并将访问令牌授予客户端应用程序。

让我们考虑一下,资源服务器为"www.serversite.com",授权服务器为"www.authserver.com",客户端应用为"www.clientapp.com"。

Flow:

第一步:假设www.serversite.com作为支付网关站点,客户端必须将"www.serversite.com"集成到"www.clientapp.com"中,以创建、执行和退款付款。

步骤2:所以客户机"www.client app.com"在服务器"www.serversite.com"中创建一个应用程序并获取API凭据。

步骤3:使用这些API凭据,客户机"www.clientapp.com"向认证服务器"www.auth server.com"发出访问令牌请求。

步骤4:如果来自客户端应用程序的API凭据有效,那么auth服务器将授予访问令牌。

步骤5:使用此访问令牌,客户端应用程序请求资源服务器进行进一步操作,如创建付款和执行付款。

My questions:

我正在使用ASP.NET Web API作为授权服务器,并使用owin.oauth生成访问令牌、刷新令牌、授权以及授权客户端应用程序所需的所有内容。

但是,在这个链接(owin-oauth 2.0授权服务器)中,我发现web api使用"资源所有者密码凭据授权"对客户端应用进行授权,并且为在web api中实现owin.oauth提供的示例很好,但是我脑子里有很多困惑。

  • 哪种获得授权的方式适合我的流程?(客户端凭据流或资源所有者密码凭据流)

  • 如何使用ASP.NET Web实现客户端凭据授予类型API(OWIN OAuth)?

  • 还提供一些可能对我有帮助的示例或链接?

事先谢谢。


下面是如何在ASP.NET网站上开始的示例,具体如下:

http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server

我引用:

1
2
3
4
5
6
7
8
9
10
11
private Task GrantClientCredentails(OAuthGrantClientCredentialsContext context)
{
 var identity = new ClaimsIdentity(new GenericIdentity(
    context.ClientId, OAuthDefaults.AuthenticationType),
    context.Scope.Select(x => new Claim("urn:oauth:scope", x))
    );

 context.Validated(identity);

 return Task.FromResult(0);
}

显然,在继续并将上下文设置为"已验证"之前,您需要继续验证本地数据库中是否存在实际的客户机ID/秘密。

在决定要使用哪个流时,您需要问问自己,如果应用程序代表实际用户请求访问您的API,那么您需要使用资源所有者,但是如果应用程序本身需要访问,那么客户端凭据就是解决问题的方法。

不过,一般来说,大多数实现都使用授权代码流,因此,如果您可以形成一个安全支撑点,让用户重定向到您宿主的页面以获取其凭证,而不是通过资源所有者流将其通过网络发送。