如何在ASP.NET MVC 5和WEB API 2中实现oauth2服务器

首先,我将画出我的项目:

对于我的实习船,我需要为现有系统添加function。 用户通过oauth2授权后,第三方客户端必须能够访问AX Web服务中的数据。 我知道我需要做一个“代理networking服务”,客户可以在那里打他的电话,这叫做AX服务,但是我对oauth2部分有点不确定。 大多数教程和指南都是关于使用ASP.NET的Identity for Facebook或Googlelogin。 我不需要,我需要使用现有的凭据,所以我需要做我自己的oauth2服务。

我发现很难find这方面的教程,指南或解释。 我了解oauth2,需要做什么,但是我从来没有做过这样的事情,并且很难开始。 最接近我所需要的是我发现这个github回购链接 ,但解决scheme不build立。

我想到的是build立一个ASP.NET MVC网站,客户端(第三方)可以注册自己并获得他们的客户端ID。 使用ASP.NET API时,我想创build带有所需令牌和参数的API,然后访问Dyn AX服务。

这是正确的,还是我完全错了? 任何帮助或build立自己的oauth2服务器/服务的链接将是很好的。

Taiseer Joudeh有一篇精彩的博客文章,详细的分步说明。

  1. 第1部分:使用ASP.NET Web API 2,Owin和Identity的基于令牌的身份validation
  2. 第2部分:使用ASP.NET Web API 2,Owin和Identity的AngularJS令牌validation
  3. 第3部分:使用ASP .NET Web API 2和Owin在AngularJS App中启用OAuth刷新令牌
  4. 第4部分:使用Facebook和Google在AngularJS应用程序中进行ASP.NET Web API 2外部login
  5. 第5部分:从资源服务器中解耦OWIN授权服务器

我也努力寻找关于如何生成令牌部分的文章。 我从来没有find一个,写我自己的。 所以如果有帮助:

要做的事情是:

  • 创build一个新的Web应用程序
  • 安装以下NuGet软件包:
    • Microsoft.Owin
    • Microsoft.Owin.Host.SystemWeb
    • Microsoft.Owin.Security.OAuth
    • Microsoft.AspNet.Identity.Owin
  • 添加一个OWIN startup

然后用这些内容创build一个HTML和一个JavaScript( index.js )文件:

 var loginData = 'grant_type=password&username=test.test@mail.com&password=test123'; var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState === 4 && xmlhttp.status === 200) { alert(xmlhttp.responseText); } } xmlhttp.open("POST", "/token", true); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp.send(loginData); 
 <!DOCTYPE html> <html> <head> <title></title> </head> <body> <script type="text/javascript" src="index.js"></script> </body> </html> 

OWIN startup类应该有这样的内容:

 using System; using System.Security.Claims; using Microsoft.Owin; using Microsoft.Owin.Security.OAuth; using OAuth20; using Owin; [assembly: OwinStartup(typeof(Startup))] namespace OAuth20 { public class Startup { public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; } public void Configuration(IAppBuilder app) { OAuthOptions = new OAuthAuthorizationServerOptions() { TokenEndpointPath = new PathString("/token"), Provider = new OAuthAuthorizationServerProvider() { OnValidateClientAuthentication = async (context) => { context.Validated(); }, OnGrantResourceOwnerCredentials = async (context) => { if (context.UserName == "test.test@mail.com" && context.Password == "test123") { ClaimsIdentity oAuthIdentity = new ClaimsIdentity(context.Options.AuthenticationType); context.Validated(oAuthIdentity); } } }, AllowInsecureHttp = true, AccessTokenExpireTimeSpan = TimeSpan.FromDays(1) }; app.UseOAuthBearerTokens(OAuthOptions); } } } 

运行你的项目。 令牌应显示在popup窗口中。

我正在研究同样的事情,偶然发现了在ASP.NET之上实现OAuth和OpenID的身份识别服务器 。 它集成了ASP.NET身份和成员身份重启 (Entity Framework)持久性支持。

因此,要回答您的问题,请查看他们关于如何设置OAuth和OpenID服务器的详细文档。

Gmail:OAuth

  • 转到链接
  • 用您的gmail用户名密码login
  • 点击左上方的谷歌菜单
  • 点击APIpipe理器
  • 点击凭证
  • 点击创build凭证,然后selectOAuth客户端
  • selectWeb Application作为应用程序types,然后inputName-> Enter Authorized Redirect URL(例如: http:// localhost:53922 / signin-google ) – >点击Createbutton。 这将创build凭据。 请记下Client IDSecret ID 。 最后点击确定closurespopup的凭证。
  • 接下来的重要一步是启用Google API 。 点击左侧窗格中的概述。
  • 点击社交Google API下的Google API部分。
  • 点击启用。

这全部来自Google部分。

回到您的应用程序,打开App_start/Startup.Auth.cs并取消注释以下代码片段

  app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions() { ClientId = "", ClientSecret = "" }); 

使用您已创build的Google API凭据中的值更新ClientIdClientSecret

  • 运行你的应用程序
  • 点击login
  • 您将在“使用其他部分login”部分下看到Googlebutton
  • 点击Googlebutton
  • 应用程序将提示您input用户名和密码
  • inputGmail的用户名和密码,然后点击login
  • 这将执行OAuth并返回到您的应用程序,并提示您注册Gmail身份证。
  • 点击注册将Gmail ID注册到您的应用程序数据库中。
  • 您将看到身份详细信息显示在正常注册的顶部
  • 尝试注销并通过Gmail重新login。 这会自动login到应用程序。