首页 文章

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

提问于
浏览
112

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

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

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

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

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

4 回答

  • 75

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

    要做的事情是:

    • 创建一个新的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);
            }
        }
    }
    

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

  • 4

    我正在研究同样的事情,偶然发现了identityserver,它在ASP.NET之上实现了OAuth和OpenID . 它与ASP.NET identityMembership Reboot集成,并为实体框架提供持久性支持 .

    因此,要回答您的问题,请查看how to setup an OAuth and OpenID server上的详细文档 .

  • 176

    Gmail:OAuth

    • 转到link

    • 使用您的Gmail用户名密码登录

    • 点击左上角的google菜单

    • 单击API Manager

    • 单击“凭据”

    • 单击“创建凭据”,然后选择“OAuth客户端”

    • 选择Web应用程序作为应用程序类型,然后输入名称 - >输入授权重定向URL(例如:http://localhost:53922/signin-google) - >单击“创建”按钮 . 这将创建凭据 . 请记下 Client IDSecret ID . 最后单击“确定”关闭弹出的凭据 .

    • 下一个重要步骤是启用 Google API . 单击左窗格中的Overview .

    • 单击Social APIs部分下的 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登录 . 这将自动将您登录到应用程序 .

相关问题