В настоящее время я работаю над одним и тем же проектом. Это то, что я обнаружил до сих пор.
Существует 4 отдельных вопроса.
- Сервер идентификации - поддерживает аутентификацию пользователей/клиентов/Scope
- WebAPI - Потребляет Токен генерируется идентификатор сервера для авторизации & идентификационной информации пользователя.
- WebForms/JQuery - для моего проекта в настоящее время выполняется аутентификация для существующей функциональности, перенаправляется на новый WebApi.
- HTML с использованием Javascript - Строго использует WebApi для информации.
Обычай грант ниже для пользователя вошедшего в через WebForm как объект членства & Я не хочу, чтобы попросить пользователя снова войти снова через идентификацию сервера.
Для прямого OAuth Authentication проверить образец здесь ..
Sample Javascript Client
Конфигурирование JavaScript неявной Flow будет работать нормально. Сохраните токен для соединения с api.
Сервер идентификации v3
Я был настроен с помощью
Custom Grant w IUserService
Custom Grants
Они покажут, как настроить проверку пользовательского гранта. С помощью службы пользователя вы можете получить запрос на идентификацию пользователя существующих пользователей &.
Существует много настроек для сервера удостоверений, чтобы сделать их собственными. это очень хорошо документировано на веб-сайте IdentityServer, в котором я не буду разбираться в том, как установить основы.
Ex: Client Configuration
return new List<Client>
{
new Client
{
ClientName = "Custom Grant Client",
Enabled = true,
ClientId = "client",
ClientSecrets = new List<ClientSecret>
{
new ClientSecret("secret".Sha256()),
},
Flow = Flows.Custom,
CustomGrantTypeRestrictions = new List<string>
{
"custom"
}
}
};
WebAPI - Ресурс
Пример WebApi Client Sample
нужно иметь пакет NuGet
Thinktecture.IdentityServer.Acc essTokenValidation
Startup.cs
app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
//Location of your identity server
Authority = "https://localhost:44333/core"
});
WebForms BackEnd WebForms Позвоните
Нужна NuGet Пакет
Thinktecture.IdentityModel.Client
[WebMethod]
[ScriptMethod(ResponseFormat.Json)]
public static string AuthorizeClient()
{
var client = new OAuth2Client(
//location of identity server, ClientId, ClientSecret
new Uri("http://localhost:44333/core/connect/token"),
"client",
"secret");
//ClientGrantRestriction, Scope (I have a Client Scope of read), Listing of claims
var result = client.RequestCustomGrantAsync("custom", "read", new Dictionary<string, string>
{
{ "account_store", "foo" },
{ "legacy_id", "bob" },
{ "legacy_secret", "bob" }
}).Result;
return result.AccessToken;
}
Эти общие претензии в этом примере, однако я могу генерировать свои собственные объекты претензии, связанные с пользователем для отправки на Сервер идентификации & регенерировать идентичности для WebAPI потреблять.
WebForms/JQuery с использованием
JQuery.cookie
$('#btnTokenCreate').click(function (e) {
//Create Token from User Information
Ajax({
url: "Default.aspx/AuthorizeClient",
type: "POST"
},
null,
function (data) {
sendToken = data.d;
//Clear Cookie
$.removeCookie('UserAccessToken', { path: '/' });
//Make API Wrap Info in Stringify
$.cookie.json = true;
//Save Token as Cookie
$.cookie('UserAccessToken', sendToken, { expires: 7, path: '/' });
});
JQuery Ajax WebAPI Sample Ajax метод - Обратите внимание на beforeSend.
function Ajax(options, apiToken, successCallback) {
//Perform Ajax Call
$.ajax({
url: options.url,
data: options.params,
dataType: "json",
type: options.type,
async: false,
contentType: "application/json; charset=utf-8",
dataFilter: function (data) { return data; },
//Before Sending Ajax Perform Cursor Switch
beforeSend: function (xhr) {
//Adds ApiToken to Ajax Header
if (apiToken) {
xhr.withCredentials = true;
xhr.setRequestHeader("Authorization", " Bearer " + apiToken);
}
},
// Sync Results
success: function (data, textStatus, jqXHR) {
successCallback(data, textStatus, jqXHR);
},
//Sync Fail Call back
error: function (jqXHR, textStatus, errorThrown) {
console.log(errorThrown);
}
});
}
AngularJS
Это та же идея, как JQuery, используя
module.run(function($http) {
//Make API Wrap Info in Stringify
$.cookie.json = true;
//Save Token as Cookie
var token = $.cookie('UserAccessToken');
$http.defaults.headers.common.Authorization = 'Bearer ' + token });
Это делает предположение о том, вы используете один и тот же домен, как WebForm. В противном случае я бы использовал строку Query для перенаправления на угловую страницу с помощью токена.
Для поддержки CORS необходимо убедиться, что WebApi имеет Cors, настроенный для правильной работы. использовать консоль
Microsoft.AspNet.WebApi.Cors
Надеется, что это проливает некоторый свет на предмет того, как подойти к этим
Проверить http://bit.ly/1RNkyc9 – user960567