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

Rob*_*bin 124 asp.net oauth-2.0 asp.net-mvc-5 asp.net-web-api2

首先,我将描绘我的项目:

对于我的实习船,我需要为现有系统添加功能.一旦用户通过oauth2授权,第三方客户端必须能够访问AX Web服务中的数据.我知道我需要建立一个"代理Web服务",客户端可以在其中进行调用并调用AX服务,但我对oauth2部分有点不确定.大多数教程和指南都是关于在Facebook或谷歌登录中使用ASP.NET的标识.我不需要,我需要使用现有的凭据,所以我需要自己创建oauth2服务.

我发现很难找到关于此的教程,指南或解释.我理解oauth2以及需要做什么,但我以前从未做过这样的事情并且发现它很难开始.我发现的最接近我需要的是这个github repo链接,但解决方案没有构建.

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

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

Mic*_*elS 186

Taiseer Joudeh有一篇精彩的博客文章,详细的逐步描述.

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

  • @MichaelS感谢您参考我的博客文章,很高兴它对您的项目有帮助:) (16认同)
  • 只有第4部分是关于Facebook和谷歌.两个月前,我基于这些教程实现了自己的身份验证控制器.我也在使用自己的用户数据库. (3认同)

Kai*_*ann 83

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

要做的事情是:

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

然后index.js使用以下内容创建HTML和JavaScript()文件:

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);
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <script type="text/javascript" src="index.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我真的很喜欢你没有引入ASP身份或实体框架.我见过的大多数文章都将这些文章与OAuth解决方案相结合.您的解决方案侧重于OAuth和令牌的发布.非常好.还要感谢您在博客上发帖. (5认同)
  • 很好,我喜欢你的解决方案是多么简约.您应该将代码放在答案中. (3认同)
  • 我只想添加一件事,即如果你也得到Newtonsoft.Json无效的汇编错误(在.NET 4.6及更高版本中),那么请将Newtonsoft.Json更新到版本11或更高版本. (2认同)

Kor*_*yem 5

我正在研究同样的事情,并偶然发现了在ASP.NET 之上实现 OAuth 和 OpenID 的身份服务器。它与ASP.NET 身份成员身份重新启动以及对实体框架的持久性支持集成。

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