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