如何从 OAuth 客户端凭据开始使用 OWIN Oauth 保护 WebApi?

Posted

技术标签:

【中文标题】如何从 OAuth 客户端凭据开始使用 OWIN Oauth 保护 WebApi?【英文标题】:How to start with OAuth Client Credentials to protect WebApi using OWIN Oauth? 【发布时间】:2014-07-07 01:49:51 【问题描述】:

我是 OAuth 2.0 的新手。

我仔细阅读了OAuth 2.0 doc,发现有四种获取授权的方法。

获得授权的类型:

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”

流程:

步骤 1: 还假设www.serversite.com 作为支付网关站点,客户端必须将“www.serversite.com”集成到“www.clientapp.com”中进行创建,执行和退还付款。

第 2 步:因此客户端“www.clientapp.com”在服务器“www.serversite.com”中创建一个应用程序并获取 API 凭据。

第 3 步:使用这些 API 凭据,客户端“www.clientapp.com”向身份验证服务器“www.authserver.com”发出访问令牌请求。

第 4 步:如果来自客户端应用的 API 凭据有效,则身份验证服务器会授予访问令牌。

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

我的问题:

我正在使用ASP.NET Web API for authorization server 和OWIN.OAuth 来生成访问令牌、刷新令牌、授权以及授权客户端应用程序所需的所有内容。

但是,在此链接 (OWIN OAuth 2.0 Authorization Server) 中,我发现 web api 使用 "Resource Owner Password Credentials Grant" 授权客户端应用程序,并且为在 web api 中实现 Owin.OAuth 提供的示例很棒,但我有很多困惑在我脑海中漫游。

哪种获取授权的方式适合我的流程? (客户凭证流程或资源所有者密码凭证流程

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

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

提前致谢。

【问题讨论】:

使用客户端凭据进行应用到应用的身份验证。对于用户身份验证,请使用 Authcode 授权类型。 【参考方案1】:

在asp.net网站上有一个如何开始的例子,具体在这里:

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

我引用:

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,那么您需要使用资源所有者,但是如果应用程序本身需要访问权限,那么客户凭证是要走的路。

一般来说,大多数实现都使用授权代码流,因此如果您可以形成安全立场,请将用户重定向到您托管的页面以获取他们的凭据,而不是通过资源所有者流通过网络发送他们。

【讨论】:

谢谢。您的回答只是帮助我在过去 2 周内搜索互联网!! @siddhantKumar 没问题。

以上是关于如何从 OAuth 客户端凭据开始使用 OWIN Oauth 保护 WebApi?的主要内容,如果未能解决你的问题,请参考以下文章

在WebApi中基于Owin OAuth使用授权发放Token

修改 OWIN OAuth 中间件以使用 JWT 不记名令牌

如何在使用 OAuth2 的资源所有者密码凭据授予类型时对客户端凭据保密

Owin.OAuth

授权角色 WebAPI oauth owin

授权角色 WebAPI oauth owin