С Новым годом для всех ...IdentityServer4 IdentityServer3.AccessTokenValidation
Я настроил IdentityServer4, и я могу сделать успешную ASP.net Ключевых Web API вызовов. Но для asp.net framework 4.5.2 web apis, Я получил {«Код состояния ответа не указывает на успех: ошибка 401 (неавторизованная)."} Из .NET framework web api. Я хочу спросить вашу помощь и мнение.
Я прочитал тему с IS4 и нашел несколько записей о совместимости IdentityServer3.AccessTokenValidation. И в соответствии с ответами я загрузил сертификат подписи и назвал AddSigningCredential вместо AddTemporarySigninCredential. x509certificate - это локальный созданный сертификат. и я обновил версию IdentityServer3.AccessTokenValidation до версии 2.2.
Еще я получил ошибку. Любая помощь приветствуется.
С уважением и благодарностью за ваши большие усилия.
IdentityServer 4 сторона: Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services
.AddIdentityServer()
//.AddTemporarySigningCredential()
.AddSigningCredential(x509Certificate)
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryClients(Config.GetClients())
.AddAspNetIdentity<ApplicationUser>();
}
Config.cs
public static IEnumerable<ApiResource> GetApiResources()
{
return new List<ApiResource>
{
new ApiResource("AuthorizationWebApi","Authorization Web API .NET Core"),
new ApiResource("AuthorizationWebApiNetFramework","Authorization Web API NET Framework"),
new ApiResource("api1", "Empty Test Api")
};
}
public static IEnumerable<Client> GetClients()
{
return new List<Client> {
new Client {
ClientId = "silicon",
ClientName = "console app",
AllowedGrantTypes = GrantTypes.ClientCredentials,
ClientSecrets = { new Secret("abcdef".Sha256())},
AllowedScopes = new List<string>{
"AuthorizationWebApiNetFramework"
}
},
new Client
{
ClientId = "MYUX",
ClientName = "MYUX MVC Client",
AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
RequireConsent = false,
ClientSecrets= {new Secret("abcdef".Sha256()) },
RedirectUris = { "http://localhost:5002/signin-oidc" },
PostLogoutRedirectUris = {"http://localhost:5002"},
AllowedScopes = {
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"custom.profile",
"AuthorizationWebApi",
"AuthorizationWebApiNetFramework"
},
AllowOfflineAccess = true
}
};
}
.NET Framework Api Side
public void Configuration(IAppBuilder app)
{
//ConfigureAuth(app);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
Authority = "http://www.abcdefgh.com:5000",
ValidationMode = ValidationMode.ValidationEndpoint,
RequiredScopes = new[] { "AuthorizationWebApiNETFramework" }
});
//configure web api
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
//require authentication for all controllers
config.Filters.Add(new AuthorizeAttribute());
app.UseWebApi(config);
}
Calling сторона:
try
{
ViewData["Message"] = "Authorization Test.";
var accessToken = await HttpContext.Authentication.GetTokenAsync("access_token");
var authorizationApiClient = new HttpClient();
authorizationApiClient.SetBearerToken(accessToken);
var content = await authorizationApiClient.GetStringAsync("http://localhost:13243/values");
return View();
}
catch (Exception ex)
{
throw;
}
или консольного приложения ...
try
{
// discover endpoints from metadata
var disco = await DiscoveryClient.GetAsync("http://www.abcdefgh.com:5000");
var tokenClient = new TokenClient(disco.TokenEndpoint, "silicon", "abcdef");
var tokenResponse = await tokenClient.RequestClientCredentialsAsync("AuthorizationWebApiNetFramework");
if (tokenResponse.IsError)
{
Console.WriteLine(tokenResponse.Error);
return;
}
Console.WriteLine(tokenResponse.Json);
var client = new HttpClient();
client.SetBearerToken(tokenResponse.AccessToken);
var response = await client.GetAsync("http://localhost:13243/values");
if (!response.IsSuccessStatusCode)
{
Console.WriteLine(response.StatusCode);
}
else
{
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(JArray.Parse(content));
}
}
catch (Exception)
{
throw;
}
EDIT: На 4.5.2 Api стороне: Я закомментирована линии ValidationMode = ValidationMode.ValidationEndpoint. Я добавил эту строку, следуя документации IS3. Всем спасибо.
Я бы предложил, начиная с образцов и подтвердить, что они работают. Затем из образцов начните сравнивать различия в ваших пользовательских проектах. –
Что говорит журнал idsrv4 во время получения ошибки 401. –
Спасибо, ребята, @BrockAllen, поскольку я сказал, что могу аутентифицировать ASP.Net Core MVC с открытым подключением id и аутентифицировать ASP.Net Core WebApi с учетными данными клиента с моим ASP.NET Core IS4. Но у меня проблема с 4.5.2 ApiResource. Jonas Axelsson Я вижу, что токен сгенерирован успешно, но поскольку я ничего не помню, когда я вызываю GetAsync из WebApi. Я проверю это сегодня :). привет – ozgurozkanakdemirci