Привет, пытаюсь сделать следующее:
WEB API отдельным доменом
IdentityServer4 API отдельным доменом
Angular 2 Client отдельным доменом
Mobile APP.
Angular 2 клиент авторизируется с помощью External сервиса (Twitter)
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(LogLevel.Debug);
app.UseCors("CorsPolicy");
app.UseIdentity();
app.UseIdentityServer();
//after identity before mvc
app.UseTwitterAuthentication(new TwitterOptions
{
AuthenticationScheme = "Twitter",
DisplayName = "Twitter",
SignInScheme = "Identity.External",
ConsumerKey = "key",
ConsumerSecret = "secret",
AutomaticAuthenticate = true,
AutomaticChallenge = true,
SaveTokens = true,
});
app.UseMvc();
}
Код ниже сохраняет мой токен из твиттера в базу:
bool result = false;
var info = await signInManager.GetExternalLoginInfoAsync();
if (info != null)
{
var tempUser = info.Principal;
var claims = tempUser.Claims.ToList();
var userIdClaim = claims?.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier);
var email = claims?.FirstOrDefault(x => x.Type == ClaimTypes.Email);
if (userIdClaim != null)
{
var isRegistered = await IsUserRegistered(info.LoginProvider, info.ProviderKey);
if (!isRegistered && email != null)
{
var user = new ApplicationUser { UserName = userIdClaim.Value, Email = email.Value };
var userCreated = await userManager.CreateAsync(user);
isRegistered = userCreated.Succeeded;
if (isRegistered)
{
var addLoginresult = await userManager.AddLoginAsync(user, info);
isRegistered = addLoginresult.Succeeded;
if (isRegistered)
{
await signInManager.SignInAsync(user, isPersistent: false);
}
}
}
if (isRegistered)
{
var succeded = await signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false);
if (succeded.Succeeded)
{
IdentityResult updateResult = await signInManager.UpdateExternalAuthenticationTokensAsync(info);
result = updateResult.Succeeded;
}
}
}
}
if (!result)
{
await signInManager.SignOutAsync();
}
return Redirect(System.Net.WebUtility.UrlDecode(returnUrl));
На данный момент непонятно, как мне получить из этого валидный токен, который я мог бы вернуть на клиент (на данный момент возвращается кука), токеном уже в последствии авторизироваться в других апишках или ресурсах.