2016-01-29 68 views
0

我的任务是在我们的应用程序中添加一个外部登录。这个想法是,您可以从应用程序A登录,并使用来自应用程序B的凭据登录到应用程序A.OAuth - 我的资源服务器是否需要端点'授权'和'令牌'

使用应用程序B,我提供了一些API方法来验证用户,注册用户,获取密码等。我没有这个API的端点用于'Token'或'Authorize'(生成Oauth_token)。

演员

客户:应用程序A

资源服务器:应用B


问题:

我可以实现只用一个访问的OAuth的解决方案应用程序B的方法很少?

我想我迷路了,想方设法解决这个问题。我不知道如何实现这种情况下的自定义OAuthService提供程序。

谁能一些线索呢?

+0

oAuth2或oAuth1? oAuth2更适合Web服务器。 – bri

回答

1

请查看本教程中,这是非常容易。 http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/

为了实现在应用程序A自定义OAuthAuthorizationServerProvider请看看在步骤10在上面的教程和尝试是这样的:

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) 
    { 
     context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" }); 

     if(!ApplicationB.Validate(username, password)) 
     { 
      context.SetError("invalid_grant", "The user name or password is incorrect."); 
      return; 
     } 

     var identity = new ClaimsIdentity(context.Options.AuthenticationType); 
     identity.AddClaim(new Claim("sub", context.UserName)); 
     // add new claims relevant for your identity (ex: PortalAlias) 

     context.Validated(identity); 

    } 

然后在应用程序的Web API控制器只是换到应用程序调用B API

+0

感谢您的回应!这是一个很好的教程,我实际上已经研究了2-3天。关于该教程,我正在做的是我已经下载了'DemoApp'。我想集成第三个外部登录提供程序。我会在哪里开始呢?我在这个情景中最大的问题是我从哪里开始?我在哪里放置URI端点(Applicaiton B没有使用端点,所以我不知道该怎么办? – jward01

+1

假设你的ApplicationB是一个暴露一些API的库。对于应用程序A,你现在构建一个客户端(Web /桌面应用程序)接口和一个Web服务(假设WebApi就像本教程中所示)。现在,在Web Api控制器中,您只需将ApplicationB API调用(将其更好地封装到服务中以避免将逻辑保存到控制器中)从应用程序B获取所需的数据 – mariovalens

+0

你非常有帮助。谢谢!! – jward01

1

简答:是的,您可以使用单个控制器操作。

如果您使用的是.net mvc,那么您可以通过一个动作和不同的Id值实现整个事情。只要创建与格式监听“ID”或“令牌”的动作的authorizationController:

https://yoursite.com/authorization/id?[params] 
https://yoursite.com/authorization/token?[params] 

在你的路线,授权将解析为一个动作,ID /令牌都将解析一个ID。

参数(查询或表单提交)

然后,接受你需要按照相应的方法和过程。(可选)参数的参数。大部分oAuth客户端都会查找初始url和一个url,以将他们的自动化代码转换为访问令牌。响应是众所周知的(例如 - 我期望从oAuth响应中看到的数据是众所周知的),并且发布和返回的名称(例如 - type,client_id,client_secret,token,code,redirect_uri等)是也是众所周知的。

示例服务(S)

这有助于从一个证据充分的OAuth的服务像the one for basecamp落后工作。在一天结束时,这就是你想要制作的东西。如果您需要第二个来源进行比较,您也可以使用zapier的oAuth2文档。

This article给出了整个过程如何工作的一个很好的(基本)概述。客户端调用,服务器返回的内容等。这是一个很好的起点。

实施为可能“grant_types”,因为你需要,只是记录您的服务器支持你的消费者的人(或者,在你的情况下,APPB的开发者)。

最后一点:你应该确保OAuth是正确的答案。

我觉得我需要添加一个快速编辑并解释oAuth可能不是您所发现的特定业务问题的正确解决方案!大多数人使用oAuth2访问另一个应用程序的api(而不是使用其他应用程序对用户进行身份验证)。

的oAuth.net网站最好说它:

的的OAuth 2.0规范定义了一个代表团协议[...]。 OAuth 用于各种应用程序,包括为用户身份验证提供 机制。这导致许多开发商和 API提供商错误结论是OAuth是本身 认证协议,并错误地使用它这样。

如果你只是试图验证用户,那么也许oAuth2是错误的解决方案。

1

资源服务器不发出令牌。授权服务器发放令牌。

您将需要一个授权服务器,其经令牌终点和一些机制来验证令牌发出的令牌。如果您可以修改应用程序B以拥有令牌端点,那么它可以充当您的授权服务器。如果您不能,您可以使用令牌端点构建另一个应用程序作为授权服务器。这个新的应用程序会在应用程序B上调用“验证用户”来验证用户凭证并在令牌有效时发出令牌。

假设应用程序A是一个值得信赖的应用B(例如:你的公司拥有并保持两个应用程序),你可以用很可能只能通过使用OAuth的resource owner flow有令牌端点脱身。

相关问题