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

首先,我要勾勒出我的项目:

对于我的实习,我需要添加一个现有的系统的功能。第三方客户端必须能够访问来自 AX Webservices 的数据,一旦他被用户通过 OAuth2授权。我明白我需要做一个“代理网络服务”,客户端可以在那里进行调用,并调用 AX 服务,但我对 OAuth2部分有点不确定。大多数教程和指南都是关于如何使用 ASP.NET 的 Facebook 或 Google 登录身份的。我不需要它,我需要使用现有的凭据,所以我需要制作自己的 OAuth2服务。

我发现很难找到关于这方面的教程、指南或解释。我了解 OAuth2以及需要做什么,但我以前从未做过这样的事情,发现很难开始。最接近我需要什么,我发现是这个 Github 回购链接,但解决方案不建立。

我的想法是建立一个 ASP.NET MVC 网站,客户(第三方)可以在这里注册并获得他们的客户 ID。使用 ASP.NET API,我想创建一个接受所需令牌和参数的 API,然后访问 Dyn AX 服务。

这是正确的还是完全错误的?有关构建自己的 oauth2服务器/服务的任何帮助或链接都很好。

169018 次浏览

我也很难找到关于如何生成令牌部分的文章。我从来没有找到一个,并写了我自己的。如果有帮助的话:

要做的事情是:

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

然后创建一个包含以下内容的 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);
}
}
}

运行您的项目。令牌应该显示在弹出窗口中。

我正在研究同样的东西,偶然发现了 身份服务器,它在 ASP.NET 之上实现了 OAuth 和 OpenID。它与 ASP.NET 标识会员重启集成,并对实体框架提供持久性支持。

因此,为了回答你的问题,请查看他们在 如何设置 OAuth 和 OpenID 服务器上的详细文档。

Gmail: OAuth

  • 链接
  • 用你的 gmail 用户名密码登录
  • 点击左上角的谷歌菜单
  • 单击 API 管理器
  • 点击证书
  • 单击“创建凭据”并选择“ OAuth Client”
  • 选择 Web Application as Application type 并输入 Name-> Enter Authorized Redirect URL (如: http://localhost:53922/signin-google)-> Click on Create 按钮。这将创建凭据。请注意 Client IDSecret ID。最后单击 OK 关闭弹出的凭据。
  • 下一个重要步骤是启用 Google API。单击左窗格中的 Overview。
  • 点击社交 API 部分下的 Google API
  • 单击“启用”。

这就是谷歌的全部内容。

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

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

使用已经创建的 Google API凭据中的值更新 ClientIdClientSecret

  • 运行应用程序
  • 点击登录
  • 你会看到“使用其他部分登录”部分下的 Google 按钮
  • 点击 Google 按钮
  • 应用程序将提示您输入用户名和密码
  • 输入 gmail 用户名和密码,然后单击“登录”
  • 这将执行 OAuth 并返回到您的应用程序,并提示您注册 Gmail id。
  • 单击 register 将 Gmail id 注册到应用程序数据库中。
  • 您将看到身份详细信息显示在顶部,作为正常的注册
  • 尝试注销并通过 Gmail 再次登录。这将自动登录到应用程序。