Я работаю над мобильным приложением Xamarin Forms с бэкендом .NET. Я последовал this guide и успешно настроить пользовательские аутентификации с одним изменением в Startup.cs:Azure для мобильных приложений Пользовательская + аутентификация Facebook с Xamarin.Forms
app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions
{
SigningKey = Environment.GetEnvironmentVariable("WEBSITE_AUTH_SIGNING_KEY"),
ValidAudiences = new[] { Identifiers.Environment.ApiUrl },
ValidIssuers = new[] { Identifiers.Environment.ApiUrl },
TokenHandler = config.GetAppServiceTokenHandler()
});
без "если (string.IsNullOrEmpty (settings.HostName))". В противном случае я всегда получаю несанкционированный доступ ко всем запросам после входа в систему.
проект Сервера:
Auth контроллер
класса ClubrAuthController общественности: ApiController { частных чтений ClubrContext DbContext; приватный readonly ILoggerService loggerService;
public ClubrAuthController(ILoggerService loggerService) { this.loggerService = loggerService; dbContext = new ClubrContext(); } public async Task<IHttpActionResult> Post(LoginRequest loginRequest) { var user = await dbContext.Users.FirstOrDefaultAsync(x => x.Email == loginRequest.username); if (user == null) { user = await CreateUser(loginRequest); } var token = GetAuthenticationTokenForUser(user.Email); return Ok(new { authenticationToken = token.RawData, user = new { userId = loginRequest.username } }); } private JwtSecurityToken GetAuthenticationTokenForUser(string userEmail) { var claims = new[] { new Claim(JwtRegisteredClaimNames.Sub, userEmail) }; var secretKey = Environment.GetEnvironmentVariable("WEBSITE_AUTH_SIGNING_KEY"); var audience = Identifiers.Environment.ApiUrl; var issuer = Identifiers.Environment.ApiUrl; var token = AppServiceLoginHandler.CreateToken( claims, secretKey, audience, issuer, TimeSpan.FromHours(24) ); return token; }
}
Startup.cs проект
ConfigureMobileAppAuth(app, config, container); app.UseWebApi(config); } private void ConfigureMobileAppAuth(IAppBuilder app, HttpConfiguration config, IContainer container) { config.Routes.MapHttpRoute("ClubrAuth", ".auth/login/ClubrAuth", new { controller = "ClubrAuth" }); app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions { SigningKey = Environment.GetEnvironmentVariable("WEBSITE_AUTH_SIGNING_KEY"), ValidAudiences = new[] { Identifiers.Environment.ApiUrl }, ValidIssuers = new[] { Identifiers.Environment.ApiUrl }, TokenHandler = config.GetAppServiceTokenHandler() }); }
Клиента:
MobileServiceUser user = await MobileClient.LoginAsync(loginProvider, jtoken);
Кроме того, я настроен провайдер Facebook в лазурном портале, как описано here. Но он работает только тогда, когда я комментирую app.UseAppServiceAuthentication (новый AppServiceAuthenticationOptions() {...}); в Startup.cs. Что мне не хватает, чтобы оба типа аутентификации работали одновременно?
Я включил аутентификацию/авторизацию приложения, но получаю неаронизированный ответ без app.UseAppServiceAuthentication (новый AppServiceAuthenticationOptions() {...}); в Startup.cs. Можно ли настроить аутентификацию Custom + Facebook с помощью Xamarin.Forms? Может ли кто-нибудь предоставить рабочий образец? –
Это возможно. То, что Адриан указывает на то, что app.UseAppServiceAuthentication() не связано с пользовательской частью аутентификации, и я думаю, что здесь вводится проблема. Объясню больше в моем собственном ответе, чтобы не ударить по персонажам :) – mattchenderson