Asp.net core 如何在ASp.net内核中使用/实现OAuth2和Owin?

Asp.net core 如何在ASp.net内核中使用/实现OAuth2和Owin?,asp.net-core,asp.net-core-mvc,Asp.net Core,Asp.net Core Mvc,您好,我是整个web开发的初学者,我有一个任务要做一个API,不管好坏,我选择了Asp.Core来做 该api将移动客户端与CRM系统连接,并且有一个广告系统(不是azure也不是windows广告),称为NetIQ。对api的任何请求都必须来自经过Net IQ验证的用户,然后api才会向客户端发出令牌 无论如何,我希望有一种身份验证机制,并且我被告知OWIN可以处理OAUTh2的东西 我有确切的代码,我需要,但它是与MVC5 有人能帮我把这个东西迁移到MVC核心吗 我找了很久,找不到我想要的东

您好,我是整个web开发的初学者,我有一个任务要做一个API,不管好坏,我选择了Asp.Core来做

该api将移动客户端与CRM系统连接,并且有一个广告系统(不是azure也不是windows广告),称为NetIQ。对api的任何请求都必须来自经过Net IQ验证的用户,然后api才会向客户端发出令牌

无论如何,我希望有一种身份验证机制,并且我被告知OWIN可以处理OAUTh2的东西

我有确切的代码,我需要,但它是与MVC5

有人能帮我把这个东西迁移到MVC核心吗

我找了很久,找不到我想要的东西。也许是因为我在网络领域还是一个比根纳

我要迁移的代码是

Startup.cs

Startup.Auth.cs

ApplicationAuthProvider.cs


那么,有人有一个样本,我将如何在ASP核心做到这一点?因为整个创业过程让我很困惑

不幸的是,这些组件都不能与ASP.NET内核一起工作。这里列出了几个备选方案:不幸的是,这些组件都不能与ASP.NET核心一起工作。这里列出了几种备选方案:
public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);
    }
}
 public partial class Startup
    {
        public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }

        public static string PublicClientId { get; private set; }

        // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
        public void ConfigureAuth(IAppBuilder app)
        {
            // Configure the application for OAuth based flow
            PublicClientId = "self";
            OAuthOptions = new OAuthAuthorizationServerOptions
            {
                TokenEndpointPath = new PathString("/token"),
                Provider = new ApplicationOAuthProvider(),
                AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(15),
                AllowInsecureHttp = true
            };
            // Enable the application to use bearer tokens to authenticate users
            app.UseOAuthBearerTokens(OAuthOptions);
        }
    } 
public class ApplicationOAuthProvider : OAuthAuthorizationServerProvider
{
    private static string aadInstance = "https://login.microsoftonline.com/{0}";
    private static string tenant = ConfigurationManager.AppSettings["AzureAD.Tenant"];
    private static string clientId = ConfigurationManager.AppSettings["AzureAD.ClientId"];
    private static string authority = string.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
    private static AuthenticationContext authContext = null;


    public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
    {
        context.Validated();
    }

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });

        authContext = new AuthenticationContext(authority, new TokenCache());
        var creds = new UserPasswordCredential(context.UserName, context.Password);
        AuthenticationResult result;
        try
        {
            result = await authContext.AcquireTokenAsync(clientId, clientId, creds);
        }
        catch (Exception ex)
        {
            context.SetError("invalid_grant", "The user name or password is incorrect.");
            return;
        }

        var identity = new ClaimsIdentity(context.Options.AuthenticationType);
        identity.AddClaim(new Claim("sub", context.UserName));
        identity.AddClaim(new Claim("role", "user"));
        identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));

        context.Validated(identity);

    }
}