Вопрос
Как мы используем токен-носитель с ASP.NET 5 с использованием потока имени пользователя и пароля? Для нашего сценария мы хотим, чтобы пользователь регистрировался и входил в систему с помощью AJAX-вызовов без необходимости использования внешнего входа.
Для этого нам нужно иметь конечную точку сервера авторизации. В предыдущих версиях ASP.NET мы выполнили следующие действия, а затем запустили бы с адресом ourdomain.com/Token
.
// Configure the application for OAuth based flow
PublicClientId = "self";
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14)
};
В текущей версии ASP.NET, однако, это не работает. Мы пытались выяснить новый подход. пример aspnet/identity на GitHub, например, настраивает аутентификацию Facebook, Google и Twitter, но не отображает конечную точку сервера внешней авторизации OAuth, если только это не означает, что AddDefaultTokenProviders()
, и в этом случае нам интересно, каким будет URL-адрес провайдера.
Исследование
Мы узнали из чтения источника здесь, что мы можем добавить "промежуточное ПО аутентификации на предъявителя" в конвейер HTTP, вызвав IAppBuilder.UseOAuthBearerAuthentication
в нашем классе Startup
, Это хорошее начало, хотя мы все еще не уверены в том, как установить конечную точку маркера. Это не помогло:
public void Configure(IApplicationBuilder app)
{
app.UseOAuthBearerAuthentication(options =>
{
options.MetadataAddress = "meta";
});
// if this isn't here, we just get a 404
app.Run(async context =>
{
await context.Response.WriteAsync("Hello World.");
});
}
При переходе на ourdomain.com/meta
мы просто получаем нашу всемирную страницу приветствия.
Дальнейшие исследования показали, что мы также можем использовать метод расширения IAppBuilder.UseOAuthAuthentication
и что он принимает параметр OAuthAuthenticationOptions
. Этот параметр имеет свойство TokenEndpoint
. Поэтому, хотя мы не уверены, что делаем, мы попробовали это, что, конечно же, не сработало.
public void Configure(IApplicationBuilder app)
{
app.UseOAuthAuthentication("What is this?", options =>
{
options.TokenEndpoint = "/token";
options.AuthorizationEndpoint = "/oauth";
options.ClientId = "What is this?";
options.ClientSecret = "What is this?";
options.SignInScheme = "What is this?";
options.AutomaticAuthentication = true;
});
// if this isn't here, we just get a 404
app.Run(async context =>
{
await context.Response.WriteAsync("Hello World.");
});
}
Другими словами, при переходе на ourdomain.com/Token
нет ошибки, мы снова вернем нашу всемирную страницу приветствия.