gpt4 book ai didi

asp.net - 如何忽略身份框架的魔力并仅使用 OWIN 身份验证中间件来获取我寻求的声明?

转载 作者:行者123 更新时间:2023-12-03 01:13:53 24 4
gpt4 key购买 nike

将第三方登录集成到 ASP.NET 应用程序中的 OWIN 中间件非常酷,但我似乎不知道如何将其从取代蹩脚的成员(member) API 的新 ID 框架中分离出来。我对在基于 EF 的数据持久性中保留生成的声明和用户信息不感兴趣,我只想要声明信息,以便我可以将其应用到现有项目中我自己的用户帐户。我不想仅仅为了利用这些东西而采用新的 ID 框架。

我一直在 CodePlex 上浏览代码,但有很多静态魔法。您能提供一些建议吗?

最佳答案

使用以下代码设置 OWIN 安全中间件:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Application",
AuthenticationMode = AuthenticationMode.Passive,
LoginPath = new PathString("/Login"),
LogoutPath = new PathString("/Logout"),
});

app.SetDefaultSignInAsAuthenticationType("External");

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "External",
AuthenticationMode = AuthenticationMode.Passive,
CookieName = CookieAuthenticationDefaults.CookiePrefix + "External",
ExpireTimeSpan = TimeSpan.FromMinutes(5),
});

app.UseGoogleAuthentication();

上面的代码设置了应用程序 cookie、外部 cookie 和 Google 外部登录中间件。外部登录中间件会将外部用户登录数据转换为身份并设置到外部cookie中间件。在您的应用程序中,您需要获取外部cookie身份并将其转换为外部登录数据,然后您可以与您的数据库用户进行检查。

这里是一些示例代码。

使用应用程序 cookie 登录:

var authentication = System.Web.HttpContext.Current.GetOwinContext().Authentication;
var identity = new ClaimsIdentity("Application");
identity.AddClaim(new Claim(ClaimTypes.Name, "<user name>"));
authentication.AuthenticationResponseGrant = new AuthenticationResponseGrant(identity, new AuthenticationProperties() {
IsPersistent = false
});

获取应用程序 cookie 身份:

var identity = System.Web.HttpContext.Current.User.Identity as ClaimsIdentity;

获取外部 cookie 身份(Google):

var authentication = System.Web.HttpContext.Current.GetOwinContext().Authentication;
var result = await authentication.AuthenticateAsync("External");
var externalIdentity = result.Identity;

从身份中提取外部登录数据:

public static ExternalLoginData FromIdentity(ClaimsIdentity identity)
{
if (identity == null)
{
return null;
}

Claim providerKeyClaim = identity.FindFirst(ClaimTypes.NameIdentifier);

if (providerKeyClaim == null || String.IsNullOrEmpty(providerKeyClaim.Issuer)
|| String.IsNullOrEmpty(providerKeyClaim.Value))
{
return null;
}

if (providerKeyClaim.Issuer == ClaimsIdentity.DefaultIssuer)
{
return null;
}

return new ExternalLoginData
{
LoginProvider = providerKeyClaim.Issuer,
ProviderKey = providerKeyClaim.Value,
UserName = identity.FindFirstValue(ClaimTypes.Name)
};
}

关于asp.net - 如何忽略身份框架的魔力并仅使用 OWIN 身份验证中间件来获取我寻求的声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18885569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com