«microsoft.rest.azure.cloudexception», причина: «microsoft.rest.azure.cloudexception: для этого запроса было отказано в авторизации. — reddeveloper
C# — «сообщение»: «в этом запросе отказано в авторизации». owin промежуточное по —
Вероятно, это проблема с разрешенной аудиторией. Вот
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions { ... AllowedAudiences = new[] { "*" }, ... }Вы устанавливаете разрешенную аудиторию. Жетон aud будет проверен по списку AllowedAudiences. Но вы никогда не добавляете аудиторию к токену.
В нашем проекте я использовал CustomJwtFormat на основе кода, показанного в http://bitoftech.net/2022/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization- сервер /
Токен будет сгенерирован с вызовом
var token = new JwtSecurityToken(_issuer, audienceId, data.Identity.Claims, issued.Value.UtcDateTime, expires.Value.UtcDateTime, signingKey);Второй параметр отвечает за утверждение aud в JWT:
Из https://msdn.microsoft.com/ ru-ru / library / dn451037 (v = vs.114) .aspx:
Тип аудитории: System.String
Если это значение не равно NULL, будет добавлено утверждение {aud, ‘аудитория’}.
После установки заявки aud в токене авторизация должна работать нормально.
C# — identityserver3 .net web api. ошибка получения — для этого запроса отказано в авторизации. —
Я пытаюсь настроить аутентификацию для своего .net webapi с помощью identityserver3.
Это мой код в Owin. Запуск проекта сервера аутентификации
public class Startup
{ public void Configuration(IAppBuilder app) { // hardcoded list of clients, scopes and users var factory = new IdentityServerServiceFactory() .UseInMemoryClients(clients) .UseInMemoryScopes(scopes) .UseInMemoryUsers(users); app.UseIdentityServer(new IdentityServerOptions { SigningCertificate = new X509Certificate2($@"{AppDomain.CurrentDomain.BaseDirectory}binmy_selfsigned_cert.pfx", ConfigurationManager.AppSettings["certificatekey"]), RequireSsl = false, Factory = factory }); }А ниже приведен код моего запуска веб-API owin.
public class Startup
{ public void Configuration(IAppBuilder app) { app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions { Authority = "http://localhost:45230" }); app.UseWebApi(GlobalConfiguration.Configuration); }
}Мой сервер авторизации работает, когда я пытаюсь войти на страницу входа на серверы идентификации. Я также могу получить токен авторизации, отправив сообщение на /connect/token Однако, когда я использую полученный таким образом токен-носитель для вызова моего метода webapi ниже, он всегда выдает ошибку «{» Сообщение «:» Авторизация была отклонена для этого запроса «}.
Api —
[HttpGet] [Authorize] public IEnumerable<Customer> Get() { var customerRepository = new CustomerRepository(); return customerRepository.GetCustomers(); }Может кто-нибудь предложить, что мне не хватает?
-web-api — в авторизации для этого запроса отказано —
Я создал веб-api с базовым OAuth и мобильное приложение, использующее ajax для доступа к api. Я установил AccessTokenExpireTimeSpan равным 1 дню, как показано ниже.
static Startup()
{ PublicClientId = "self"; UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>()); OAuthOptions = new OAuthAuthorizationServerOptions { TokenEndpointPath = new PathString("/Token"), Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory), AuthorizeEndpointPath = new PathString("/api/UserAccount/ExternalLogin"), AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), AllowInsecureHttp = true };
}На моем локальном компьютере все работает нормально, пока я не развернул его на сайте хостинга.
Мое приложение может войти в систему и получить новый токен, и с этим токеном приложение (каждые 2 секунды) может получить доступ к webapi в течение всего дня, пока токен не истечет. Но если я остановлю приложение (не останавливая приложение) от доступа к webapi на 5–6 минут, а затем запущу его снова, я получу «401 — авторизация была отклонена для этого запроса». и нужно запросить новый токен.
Теперь, поскольку он работает на моем ПК, есть ли что-то, что я пропустил, что могло вызвать отказ, например, сеанс, файлы cookie, настройки в хост-системе и т. Д.?
FYI Мой компьютер использует IIS7.5, а хост-система работает на PleskWin и использует IIS8.5
Для этого запроса отказано в авторизации — azure active directory — какие журналы доступны?
Поэтому я использую почтальон с процессом OAuth 2.0, чтобы попытаться аутентифицироваться в моем WebApi через Azure Active Directory. Я все еще работаю в проекте по умолчанию с базовым ValuesController, просто пытаюсь заставить работать аутентификацию и авторизацию.
Я следил за этим видео, чтобы настроить почтальон, и, насколько я могу судить, я настроил новые приложения в активном каталоге, как описано.
Обмен токенов работает. И носитель авторизации {токен} отправляется правильно. Вот пример токена:
{Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlliUkFRUlljRV9tb3RXVkpLSHJ3TEJiZF85cyIsImtpZCI6IlliUkFRUlljRV85..NXpvslBXOpRNkmWQqj7XqVzloS3KoeSqPIlo-yUPGYkZ4bHPrAH6yD4sxMYz-19VIPFRDUMP-5h5hmaMKmuykjNUltz6wejQT9f4IeV6i7VtP3BlkfASZeAdKAiSjKh6ydV8PuJjV2HHh2WvxIKC3QQXzROwWAdeXLcgMTiKSBMULzFV8BsecgtI86_L2OISgbQZ2LgF137EPJoG7C4L1IO-10T1QIVl-Emy6AS0VKVxdzjCgiT-DFtccxME6n1CruoDy6mTKztcAkiFR1IlgY6Fvj-Y_goMQyxA5sCRebWnOQ5jeUKv4KNyNWOLJU_RiZYe0kj4IT3KDc9jjtHykg}
Однако, несмотря на то, что я успешно получаю токен, и когда я прохожу через отладчик в VS, я вижу, что токен поступает, авторизация не выполняется. Получаю такой ответ:
{"Message":"Authorization has been denied for this request."}Проблема, похоже, на стороне сервера. Когда я переопределяю IsAuthorized, чтобы вернуть true, он работает.
В Azure оба приложения находятся в одном каталоге с разрешениями делегата.
Могу ли я проверить какие-либо журналы, чтобы узнать точную причину отказа? Оттуда я, наверное, смогу понять, что происходит.
Я включил трассировку:
// Web API configuration and services
var traceWriter = config.EnableSystemDiagnosticsTracing();
traceWriter.IsVerbose = true;
traceWriter.MinimumLevel = TraceLevel.Debug;Но на самом деле это не говорит мне, почему я получаю отказ.
Вход в личный кабинет