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

如何从OAuth客户端凭据开始使用OWIN OAuth保护WebApi?,api,oauth,asp.net-web-api,oauth-2.0,owin,Api,Oauth,Asp.net Web Api,Oauth 2.0,Owin,我是OAuth2.0的新手 我已经仔细阅读了,我发现有四种获取授权的方法 获得授权的类型: 在我的例子中,我有客户端应用程序、资源所有者、资源服务器和授权服务器 资源服务器是一个网站,资源所有者使用其凭据注册 客户端应用程序是一个第三方网站,它注册到资源服务器并获取客户端应用程序凭据,以便将来访问资源服务器 授权服务器检查客户端应用程序的客户端凭据,并向客户端应用程序授予访问令牌 让我们考虑,资源服务器为“www. Servist.com”,授权服务器为“www. AuthServ.com”,客

我是OAuth2.0的新手

我已经仔细阅读了,我发现有四种获取授权的方法

获得授权的类型:

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

资源服务器是一个网站,资源所有者使用其凭据注册

客户端应用程序是一个第三方网站,它注册到资源服务器并获取客户端应用程序凭据,以便将来访问资源服务器

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

让我们考虑,<强>资源服务器为“www. Servist.com”,授权服务器为“www. AuthServ.com”,客户端应用程序为“www. client APP.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:使用此访问令牌,客户端应用程序请求资源服务器执行进一步的操作,如创建付款和执行付款

我的问题:

我正在使用和用于生成访问令牌、刷新令牌、授权以及授权客户端应用程序所需的所有内容

但是,在这个链接()中,我发现,web api授权客户端应用程序使用,并且为在web api中实现Owin.OAuth提供的示例非常好,但是我脑子里有很多困惑

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

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

  • 还提供一些样本或链接,可能对我有帮助


提前感谢。

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

我引述:

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);
}
显然,在继续并将上下文设置为validated之前,您需要验证实际的客户机id/密码是否存在于某个本地数据库中

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


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

谢谢。你的回答是我在过去两周里搜索互联网所能找到的唯一帮助@siddhantKumar没有问题。使用客户端凭据进行应用到应用的身份验证。对于用户身份验证,请使用Authcode授权类型。
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);
}