gpt4 book ai didi

javascript - 使用 Identity Server 4 和 ASP.NET Identity 添加外部登录

转载 作者:可可西里 更新时间:2023-11-01 01:25:45 24 4
gpt4 key购买 nike

在使用带有 ASP.NET Identity 的 Identity Server 4 添加身份验证功能后,我计划添加 Google Provider,以便用户也可以使用他们的 google+ 帐户登录。我使用 Angular 作为前端,使用 ASP.NET Web Api (Core) 作为后端。

// Login client
public login(email: string, password: string): Observable<any> {
let body: any = this.encodeParams({ /* cliend_id, grant_type, username, password, scope */ });

return this.http.post("http://localhost:64023/connect/token", body, this.options)
.map((res: Response) => {
const body: any = res.json();
if (typeof body.access_token !== "undefined") {
// Set localStorage with id_token,..
}
}).catch((error: any) => { /**/ );
}

// Register Web API
[HttpPost("Create")]
[AllowAnonymous]
public async Task<IActionResult> Create([FromBody]CreateUserViewModel model)
{
var user = new ApplicationUser
{
FirstName = model.FirstName,
LastName = model.LastName,
AccessFailedCount = 0,
Email = model.Email,
EmailConfirmed = false,
LockoutEnabled = true,
NormalizedEmail = model.Email.ToUpper(),
NormalizedUserName = model.Email.ToUpper(),
TwoFactorEnabled = false,
UserName = model.Email
};

var result = await _userManager.CreateAsync(user, model.Password);

if (result.Succeeded)
{
await addToRole(model.Email, "user");
await addClaims(model.Email);
}

return new JsonResult(result);
}

// Identity Server Startup
app.UseGoogleAuthentication(new GoogleOptions
{
AuthenticationScheme = "Google",
DisplayName = "Google",
SignInScheme = "Identity.External",
// ClientId, ClientSecret,..
});

用户登录后,localStorage 得到设置,我能够保护安全 Controller 。对于 Google Provider,我添加了一个额外的按钮和以下方法:

initGoogleAPI() {
let self = this;
gapi.load('auth2', function () {
self.auth2 = gapi.auth2.init({ /* client_id, cookiepolicy, scope */ });
self.externalLogin(document.getElementById('google-button'));
});
}

externalLogin(element) {
let self = this;
this.auth2.attachClickHandler(element, {},
function (googleUser) {
// retrieved the id_token, name, email,...
}, function (error) {
alert(JSON.stringify(error, undefined, 2));
});
}

我找到了一些解决方案,但仅适用于 MVC 应用程序,不适用于使用客户端框架的 SPA。接下来我需要执行哪些步骤才能使外部登录生效?用户第一次使用外部提供商登录时,是否需要在 AspNetUsers 表中创建一条新记录?

最佳答案

您可以检查这个存储库,您可以忽略 ids4 服务器项目并检查 Angular 客户端您应该使用 openid 客户端来执行此操作,然后客户端将被重定向到您登录的 ids4 项目登录页面并返回一个 token 你保存它以便以后使用它

https://github.com/nertilpoci/Aspnetcore-identityserver4-webapi-angular

https://github.com/nertilpoci/Aspnetcore-identityserver4-webapi-angular/tree/master/ClientApp

关于javascript - 使用 Identity Server 4 和 ASP.NET Identity 添加外部登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45709914/

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