【发布时间】:2013-10-09 22:00:09
【问题描述】:
我有这样的场景:一个公司网站 (MVC 4) 和一个网上商店;添加 OAuth 2 SSO 功能。两个站点都有自己的成员,但 corp 站点(我负责)也必须作为 OAuth 2 授权服务器,并将为每个成员存储一个网上商店用户 ID。商店请求了以下端点:
身份验证端点
• 授权:
…/oauth2/authorize?client_id={CLIENT_ID}&state={STATE}&response_type=code&redirect_uri={REDIRECT_URI}
• 令牌
…/oauth2/token?code={TOKEN}&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}&redirect_uri={REDIRECT_URI}&grant_type=authorization_code
…/oauth2/token?refresh_token={TOKEN}&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}&redirect_uri={REDIRECT_URI}&grant_type=refresh_token
API 端点
• getid(将返回带有会员商店 ID 的 JSON):
…/oauth2/api/getid?access_token={TOKEN}
我没有使用 OAuth 的经验,因此我查看了 DotNetOpenAuth 示例并得出结论,我需要实现 OAuthAuthorizationServer,但修改示例以适应我的要求很困难,因为它似乎可以做更多的事情并且很复杂。
由于研究 DotNetOpenAuth 似乎非常耗时,我想问一下:修改 OAuthAuthorizationServer 示例是正确的方法吗?或者我应该尝试制作本机实现或尝试在我的情况下可能更容易使用的不同 OAuth 库?
请评论我的总体计划:
-保持公司网站成员登录流程标准形式的身份验证,简单的登录控制器
-添加一个 OAuth 控制器,它将三个必需的端点实现为操作
-当达到授权操作时,我验证客户端并重定向到通过redirect_uri 传递的LogOn; 我认为the sample 中的OAuthController.cs 中的Authorize ActionResult 是我应该开始调查此问题的地方,并返回AccountAuthorizeModel。这是正确的吗?
- 用户登录后,如果从授权端点到达登录页面,我会重定向到 redirect_uri 并附上代码; 我不知道从哪里开始。 PrepareApproveAuthorizationRequest 然后PrepareResponse?代码从哪里来?我应该在数据库中的哪个流程中添加新的 ClientAuthorization?
-然后商店将使用代码从 /token 端点获取或刷新令牌; 只需返回 HandleTokenRequest?
-使用令牌商店站点将能够获取会员数据JSON; 必须弄清楚如何验证令牌
现在,除了添加一个 Clients 表来存储客户端 ID 和机密,以及 ClientAuthorization 来跟踪谁被授权之外,我不知道是否使用了 DotNetOpenAuth 示例中的其他表以及何时使用:Nonce、SymmetricCryptoKey、User .
修改 OAuth2AuthorizationServer.cs 看起来很简单,我只需要添加真正的证书并确保客户端是从我的数据上下文中提取的。
谢谢!
【问题讨论】:
标签: asp.net-mvc-4 oauth-2.0 authorization single-sign-on dotnetopenauth