Перейти к контенту
Pages 1
You must login or register to post a reply
1 2015.02.03 16:43
- PunBB
- Admin
- Offline
- More info
Topic: Невозможно подтвердить маркер доступа. Возможно, прошло некоторое…
Невозможно подтвердить маркер доступа. Возможно, прошло некоторое время после первого входа на страницу и последующей отправкой формы или щелчком по ссылке. Если это так, и вы хотите выполнить своё действие до конца, нажмите кнопку «Подтвердить». Для возврата на исходную страницу нужно нажать кнопку «Отменить».
Как подтвердить маркер доступа и что это такое? Маркер доступа позволяет проверить зашифрованную ссылку сравнивая откуда пришел пользователь и куда. Эта система была внедрена в качестве безопасности от атак хакеров и взломщиков.
Почему иногда на форуме может возникать следующее предупреждение?
На форуме PunBB у каждого посетителя имеется свой SCRF TOKEN который периодически меняется, когда посетитель некоторое время отсутствовал на форуме. Ну например, вы писали сообщение час, два, три… и при этом не открывали другие страницы во вкладках. Простыми словами страница ответа висела долгое время. И вот, спустя часов 6 вы все таки написали поэму и решили отправить ее на форум. Что происходит?
В форме уже имеется токен (можно посмотреть исходник страницы)
<input type="hidden" name="csrf_token" value="0b6ae337a22d083dde13057ce2ddf0528">
Но когда вы отправили страницу, то за то время пока вы писали сообщение токен поменялся и сравнив хеши функция обнаружила отличие токенов, что вызвало подозрение и предупреждение:
Невозможно подтвердить маркер доступа. Возможно, прошло некоторое время после первого входа на страницу и последующей отправкой формы или щелчком по ссылке. Если это так, и вы хотите выполнить своё действие до конца, нажмите кнопку «Подтвердить». Для возврата на исходную страницу нужно нажать кнопку «Отменить».
В этом случае система предлагает подтвердить отправку формы, то есть попытается обновить токен и не потеряв данные формы отправить написанное большими усилиями сообщение. Если все верно, сообщение будет отправлено, иначе система будет бесконечно выдавать предупреждение.
2 Reply by PunBB 2015.02.03 17:21
- PunBB
- Admin
- Offline
- More info
Re: Невозможно подтвердить маркер доступа. Возможно, прошло некоторое…
Иногда у начинающих программистов бывают случаи, когда данное предупреждение появляется из за не правильно оформленных ссылок в форме.
<input type="hidden" name="csrf_token" value="<?php echo generate_form_token(forum_link($forum_url['file_to'])) ?>" />
В данном случае переменная $forum_url[‘file_to’] должна быть равна абсолютной ссылке на файл куда отправляется $_POST или $_GET запрос.
Например, если вы отправляете форму скрипту файла settings.php находящегося по пути вот ссылка то
$forum_url['file_to'] = 'https://punbb.swiftmanage.com/settings.php';
или же непосредственно так:
<input type="hidden" name="csrf_token" value="<?php echo generate_form_token(forum_link('https://punbb.swiftmanage.com/settings.php')) ?>" />
3 Reply by PunBB 2015.02.03 17:28
- PunBB
- Admin
- Offline
- More info
Re: Невозможно подтвердить маркер доступа. Возможно, прошло некоторое…
Токен, или маркер доступа можно отключить либо на всех страницах либо только на требуемых.
На всех страницах отключить можно в файле config.php раскоментировав строку
// Disable forum CSRF checking by removing // from the following line
define('FORUM_DISABLE_CSRF_CONFIRM', 1);
Этого я вам крайне не рекомендую делать навсегда, а только лишь для того чтобы настроить скрипты или выявить неисправности.
Отключить в определенном файле токен можно прописав в самый вверх сразу после интерпретатора php тот же код:
define('FORUM_DISABLE_CSRF_CONFIRM', 1);
Но даже в этом случае будьте осторожны чтобы не забыть об этой определенной константе. Токен это безопасность вашего форума.
4 Reply by vladimir-timoshenko 2019.03.29 09:50
- vladimir-timoshenko
- Member
- Offline
- More info
Re: Невозможно подтвердить маркер доступа. Возможно, прошло некоторое…
форум 1.4.5
При регистрации или входе через смартфон, постоянно пишет «Невозможно подтвердить маркер доступа».
Новички при регистрации пугаются, думают, что что-то сделали не так…
Отключить токен в файле login.php?
А как же безопасность от хакеров?
5 Reply by PunBB 2019.03.29 10:44
- PunBB
- Admin
- Offline
- More info
Re: Невозможно подтвердить маркер доступа. Возможно, прошло некоторое…
vladimir-timoshenko wrote:
Отключить токен в файле login.php?
А как же безопасность от хакеров?
Если проект небольшой, то для хакеров вряд ли он будет интересным. Делайте бекапы, пока данная проблема не решена. Слышу об этом не в первый раз, возможно где то уже и есть решение, но самому некогда исследовать. Обычно это из за разных токенов генерируемых из урл, например в пост запрос поступает один урл, а на выходе другой. Вот оно сравнивая и выдает ошибку.
6 Reply by vladimir-timoshenko 2019.03.29 13:42
- vladimir-timoshenko
- Member
- Offline
- More info
Re: Невозможно подтвердить маркер доступа. Возможно, прошло некоторое…
Т.е., это проблема не у меня, а «вообще»
Понятно, спасибо! Бум надеяться на решение
7 Reply by PunBB 2019.03.29 14:21
- PunBB
- Admin
- Offline
- More info
Re: Невозможно подтвердить маркер доступа. Возможно, прошло некоторое…
Если немного есть навыки в php, то можно попробовать через print_r(); вывести получаемый урл после отправки пост запросом и сравнить что уходит и что получаем. Смотрите функцию csrf_token или что то вроде этого…
8 Reply by vladimir-timoshenko 2019.03.29 15:31
- vladimir-timoshenko
- Member
- Offline
- More info
Re: Невозможно подтвердить маркер доступа. Возможно, прошло некоторое…
увы, пока навыки только в «чуть чуть подредактировать»
Pages 1
You must login or register to post a reply
Я пытаюсь создать метод, который проверяет мои токены. Я получаю свои токены из Azure Active Directory с помощью потока кода авторизации Open Id Connect. Я получаю токены access_token и id_token. Я использую .NET Core.
Мой код проверки выглядит следующим образом:
string stsDiscoveryEndpoint = "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration";
var handler = new JwtSecurityTokenHandler();
ConfigurationManager<OpenIdConnectConfiguration> configManager = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint, new OpenIdConnectConfigurationRetriever());
OpenIdConnectConfiguration config = configManager.GetConfigurationAsync().Result;
try
{
TokenValidationParameters validationParameters = new TokenValidationParameters
{
ValidIssuers = new [] { "https://login.microsoftonline.com/tenantid/v2.0" },
ValidAudiences = new [] { "client-Id" },
ValidateAudience = true,
ValidateIssuer = true,
IssuerSigningKeys = config.SigningKeys,
ValidateLifetime = true
};
var tokenHandler = new JwtSecurityTokenHandler();
SecurityToken validatedToken = null;
tokenHandler.ValidateToken(token.AccessToken, validationParameters, out validatedToken);
return validatedToken != null;
}
catch (SecurityTokenInvalidSignatureException ex)
{
return false;
}
catch(SecurityTokenValidationException)
{
return false;
}
Код ниже работает для id_token, НО не работает для access_token
Сообщение об ошибке, которое я получаю, когда этот метод выполняется для access_token:
IDX10511: Ошибка проверки подписи. Пробовали ключи: «Microsoft.IdentityModel.Tokens.X509SecurityKey, KeyId: CtAAALb-8NsDe333734859crfOc ‘. ребенок: «CtAAALb-8NsDe333734859crfOc». Исключения пойманы: ‘
2 ответа
Заголовок nonce должен быть хеширован SHA2 перед проверкой подписи
Вот пример кода, где вы можете увидеть
jsonToken.Header.Add("nonce", hashedNonce);
private static bool _hashNonceBeforeValidateToken = true;
private const string MicrosoftGraphApplicationId = "00000003-0000-0000-c000-000000000000";
private const string MicrosoftIssuer = "https://sts.windows.net";
public static bool ValidateTokenSignature(string accessToken, ApplicationConfiguration applicationConfiguration) {
var tokenHandler = new JwtSecurityTokenHandler();
var jsonToken = tokenHandler.ReadJwtToken(accessToken);
string[] parts = accessToken.Split('.');
string header = parts[0];
string payload = parts[1];
string signature = parts[2];
//hash nonce and update header with the hash before validating
if (_hashNonceBeforeValidateToken &&
jsonToken.Header.TryGetValue("nonce", out object nonceAsObject))
{
string plainNonce = nonceAsObject.ToString();
using (SHA256 sha256 = SHA256.Create())
{
byte[] hashedNonceAsBytes = sha256.ComputeHash(
System.Text.Encoding.UTF8.GetBytes(plainNonce));
string hashedNonce = Base64Url.Encode(hashedNonceAsBytes);
jsonToken.Header.Remove("nonce");
jsonToken.Header.Add("nonce", hashedNonce);
header = tokenHandler.WriteToken(jsonToken).Split('.')[0];
accessToken = $"{header}.{payload}.{signature}";
}
}
//get the Microsoft JWT signature public key
string stsDiscoveryEndpoint = $"https://login.microsoftonline.com/{applicationConfiguration.TenantId}/v2.0/.well-known/openid-configuration";
if (jsonToken.Header.TryGetValue("ver", out object version) && version.ToString() == "1.0")
{
stsDiscoveryEndpoint = $"https://login.microsoftonline.com/{applicationConfiguration.TenantId}/.well-known/openid-configuration";
}
var openidConfigManaged = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint,
new OpenIdConnectConfigurationRetriever(),
new HttpDocumentRetriever());
var configTask = openidConfigManaged.GetConfigurationAsync();
configTask.Wait();
var config = configTask.Result;
var parameteres = new TokenValidationParameters()
{
RequireAudience = true,
ValidateAudience = true,
ValidAudiences = new[] { applicationConfiguration.ApplicationId, MicrosoftGraphApplicationId },
ValidateIssuer = true,
ValidIssuers = new string[] { $"{MicrosoftIssuer}/{applicationConfiguration.TenantId}/", config.Issuer },
IssuerSigningKeys = config.SigningKeys,
ValidateIssuerSigningKey = true,
RequireExpirationTime = true,
ValidateLifetime = true,
};
var claimPrincipal = tokenHandler.ValidateToken(
accessToken, parameteres, out SecurityToken validatedToken);
return claimPrincipal.Identity.IsAuthenticated;
}
1
Spirit_Life
23 Мар 2022 в 16:31
Asked
1 year, 8 months ago
Viewed
862 times
I am using auth0 and trying to validate Signature by invoking Microsoft identity platform but I’m receiving the error below while invoking the verify method. Please also find my code snippet.
Code Snippet:
try {
DecodedJWT decodedJWT = JWT.decode(accessToken); // your string
JwkProvider provider = new JwkProviderBuilder(new URL("https://login.microsoftonline.com/tid/discovery/v2.0/keys")).build();
Jwk jwk = provider.get(decodedJWT.getKeyId());
Algorithm algorithm = Algorithm.RSA256((RSAPublicKey) jwk.getPublicKey(), null);
JWTVerifier verifier = JWT.require(algorithm)
.withIssuer("auth0")
.build();
verifier.verify(decodedJWT);
} catch (JWTVerificationException | JwkException | MalformedURLException e) {
e.printStackTrace();
}
Error
com.auth0.jwt.exceptions.SignatureVerificationException: The Token’s Signature resulted invalid when verified using the Algorithm: SHA256withRSA
at com.auth0.jwt.algorithms.RSAAlgorithm.verify(RSAAlgorithm.java:50)
at com.auth0.jwt.JWTVerifier.verify(JWTVerifier.java:299)
at com.identity.telsmsidentity.util.MSTokenValidator.validateMSToken(MSTokenValidator.java:43)
at com.identity.telsmsidentity.controller.TelsPageController.validateToken(TelsPageController.java:98)
at com.identity.telsmsidentity.controller.TelsPageController.getUserInfoFromGraph(TelsPageController.java:59)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
asked May 9, 2021 at 7:48
2
The code below works for me, pls make sure your token version and use the corresponding version:
String token = "";
String tenantID = "";
// For Azure AD V1 token
String providerURLV1 = "https://login.microsoftonline.com/" + tenantID + "/discovery/keys";
String issuerV1 = "https://sts.windows.net/" + tenantID + "/";
// For Azure AD V2 token
String providerURLV2 = "https://login.microsoftonline.com/" + tenantID + "/discovery/v2.0/keys";
String issuerV2 = "https://login.microsoftonline.com/" + tenantID + "/v2.0";
try {
DecodedJWT decodedJWT = JWT.decode(token);
JwkProvider provider = new JwkProviderBuilder(new URL(providerURLV1)).build();
Jwk jwk = provider.get(decodedJWT.getKeyId());
Algorithm algorithm = Algorithm.RSA256((RSAPublicKey) jwk.getPublicKey(), null);
JWTVerifier verifier = JWT.require(algorithm).withIssuer(issuerV1).build();
System.out.println(verifier.verify(decodedJWT).getClaims());
} catch (Exception e) {
e.printStackTrace();
}
Result:
answered May 10, 2021 at 4:50
Stanley GongStanley Gong
11.1k1 gold badge7 silver badges16 bronze badges
19
Asked
1 year, 8 months ago
Viewed
862 times
I am using auth0 and trying to validate Signature by invoking Microsoft identity platform but I’m receiving the error below while invoking the verify method. Please also find my code snippet.
Code Snippet:
try {
DecodedJWT decodedJWT = JWT.decode(accessToken); // your string
JwkProvider provider = new JwkProviderBuilder(new URL("https://login.microsoftonline.com/tid/discovery/v2.0/keys")).build();
Jwk jwk = provider.get(decodedJWT.getKeyId());
Algorithm algorithm = Algorithm.RSA256((RSAPublicKey) jwk.getPublicKey(), null);
JWTVerifier verifier = JWT.require(algorithm)
.withIssuer("auth0")
.build();
verifier.verify(decodedJWT);
} catch (JWTVerificationException | JwkException | MalformedURLException e) {
e.printStackTrace();
}
Error
com.auth0.jwt.exceptions.SignatureVerificationException: The Token’s Signature resulted invalid when verified using the Algorithm: SHA256withRSA
at com.auth0.jwt.algorithms.RSAAlgorithm.verify(RSAAlgorithm.java:50)
at com.auth0.jwt.JWTVerifier.verify(JWTVerifier.java:299)
at com.identity.telsmsidentity.util.MSTokenValidator.validateMSToken(MSTokenValidator.java:43)
at com.identity.telsmsidentity.controller.TelsPageController.validateToken(TelsPageController.java:98)
at com.identity.telsmsidentity.controller.TelsPageController.getUserInfoFromGraph(TelsPageController.java:59)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
asked May 9, 2021 at 7:48
2
The code below works for me, pls make sure your token version and use the corresponding version:
String token = "";
String tenantID = "";
// For Azure AD V1 token
String providerURLV1 = "https://login.microsoftonline.com/" + tenantID + "/discovery/keys";
String issuerV1 = "https://sts.windows.net/" + tenantID + "/";
// For Azure AD V2 token
String providerURLV2 = "https://login.microsoftonline.com/" + tenantID + "/discovery/v2.0/keys";
String issuerV2 = "https://login.microsoftonline.com/" + tenantID + "/v2.0";
try {
DecodedJWT decodedJWT = JWT.decode(token);
JwkProvider provider = new JwkProviderBuilder(new URL(providerURLV1)).build();
Jwk jwk = provider.get(decodedJWT.getKeyId());
Algorithm algorithm = Algorithm.RSA256((RSAPublicKey) jwk.getPublicKey(), null);
JWTVerifier verifier = JWT.require(algorithm).withIssuer(issuerV1).build();
System.out.println(verifier.verify(decodedJWT).getClaims());
} catch (Exception e) {
e.printStackTrace();
}
Result:
answered May 10, 2021 at 4:50
Stanley GongStanley Gong
11.1k1 gold badge7 silver badges16 bronze badges
19
Я пытаюсь защитить свой веб-API (.net core 2.2) с помощью Azure Ad, используя неявный поток.
Я зарегистрировал свое приложение в Azure AD, используя Портал Azure > Azure Active Directoy > Регистрация приложений > Регистрация нового приложения:
Имя = MyWebApi
Тип приложения = веб-приложение/API
URL-адрес для входа = http://локальный: 55000
После создания этого приложения я открыл его файл манифеста и изменил oauth2AllowImplicitFlow с ложный на истинный.
Это все, что я сделал для регистрации приложения на портале Azure.
Затем я вручную вызвал следующий URL-адрес из браузера Chrome, чтобы получить access_token:
Ответ от вызова вышеуказанного URL-адреса:
Когда я передаю MY-ACCESS-TOKEN в качестве токена носителя в заголовке авторизации в свой веб-API (.net core 2.2), я получаю следующее исключение:
Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException: IDX10511: Ошибка проверки подписи. Пробовали ключи: «Microsoft.IdentityModel.Tokens.X509SecurityKey, KeyId: N-lC0n-9DALqwhuHYnHQ63GeCXc».
Затем я попытался вручную проверить подпись:
Когда я вставляю MY-ACCESS-TOKEN в https://jwt.io/, заголовок:
{
"typ": "JWT",
"nonce": "AQABAAAAAACEfexXxjamQb3OeGQ4Gugvm6YdOT-bkA0IPllKMt06-J8If5AQ075TVCav94X_ZYcEYKaPneqdJcqYry-Z4XjX0eMN_fiJX_8wXe9D2b6eRiAA",
"alg": "RS256",
"x5t": "N-lC0n-9DALqwhuHYnHQ63GeCXc",
"kid": "N-lC0n-9DALqwhuHYnHQ63GeCXc"
}
Затем я перешел по этому URL-адресу, чтобы получить открытый ключ для ребенка: N-lC0n-9DALqwhuHYnHQ63GeCXc.
Https://login.microsoftonline.com/common/discovery/keys
Затем я вставил следующее в качестве открытого ключа на jwt.io для проверенной подписи токена:
-----BEGIN CERTIFICATE-----
OBTAINED-PUBLIC-KEY-FROM-THE-ABOVE-URL-HERE
-----END CERTIFICATE-----
И я снова получаю Неверная подпись.
Я был в этой теме: https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/609, но я не уверен, почему заголовок моего токена имеет значение одноразовый номер и является ли это проблемой вообще в моем случае или нет.
Любые идеи, что я делаю неправильно здесь?
PeterPan |
|
Статус: Новичок Группы: Участники
Зарегистрирован: 11.08.2020(UTC) Сказал(а) «Спасибо»: 1 раз |
Добрый день! Задача проверить подпись маркера доступа ЕСИА. Документация говорит: Цитата: …. …. …. Реализую проверку по пункту №2 так: Цитата: byte[] messageBytes = Encoding.UTF8.GetBytes(Base64UrlEncoder.Decode(message.Split(new[] { ‘.’})[0]) +».»+ Base64UrlEncoder.Decode(message.Split(new[] { ‘.’ })[1])); var content = new ContentInfo(messageBytes); signedCms.Decode(signatureBytes); // здесь получаю ошибку «ASN1 bad tag value met.»
прикреплен пример токена в текстовом виде. Пробовал также через csptest утилиту, тоже ничего не вышло.
Коллеги, что делаю не так? |
|
|
Андрей * |
|
Статус: Сотрудник Группы: Участники Зарегистрирован: 26.07.2011(UTC) Сказал «Спасибо»: 451 раз |
Здравствуйте. Там не CMS, а RAW подпись (само значение). |
Техническую поддержку оказываем тут |
|
|
WWW |
Андрей * |
|
Статус: Сотрудник Группы: Участники Зарегистрирован: 26.07.2011(UTC) Сказал «Спасибо»: 451 раз |
Создание подписи: Цитата: csptest -keys -cont «HDIMAGEКонтейнер» -sign GOST12_256 -keytype exchange -in файл.ext -out файл.ext.rawsign Проверка подписи: Цитата: csptest -keys -verify GOST12_256 -in файл.ext -signature файл.ext.rawsign -cert raw.cer |
Техническую поддержку оказываем тут |
|
|
WWW |
Андрей * |
|
Статус: Сотрудник Группы: Участники Зарегистрирован: 26.07.2011(UTC) Сказал «Спасибо»: 451 раз |
В КриптоПРО.NET SDK смотреть C:Program Files (x86)Crypto Pro.NET SDKExamplessimple.zipSigncs |
Техническую поддержку оказываем тут |
|
|
WWW |
Андрей * |
|
Статус: Сотрудник Группы: Участники Зарегистрирован: 26.07.2011(UTC) Сказал «Спасибо»: 451 раз |
Можете прислать пример токена и сертификат (в ЛС)? |
Техническую поддержку оказываем тут |
|
|
WWW |
PeterPan |
|
Статус: Новичок Группы: Участники Зарегистрирован: 11.08.2020(UTC) Сказал(а) «Спасибо»: 1 раз |
Автор: Андрей * Можете прислать пример токена и сертификат (в ЛС)? В личку отправить не могу, прикрепляю файлы, а они не прикрепляются. Ссылка на сервтификат https://esia.gosuslugi.ru/public/esia.zip имя ГОСТ ТЕСИА 2012.cer Я пробовал так ранее Цитата: private static bool VerifyRawSignString(string message, string signature, X509Certificate2Collection certificates) Gost3411_2012_256CryptoServiceProvider GostHash = new Gost3411_2012_256CryptoServiceProvider(); Возвращает false. |
|
|
Андрей * |
|
Статус: Сотрудник Группы: Участники Зарегистрирован: 26.07.2011(UTC) Сказал «Спасибо»: 451 раз |
Цитата: 2. Третья часть маркера доступа представляет собой подпись в кодировке UTF-8 от значений первых двух частей маркера доступа (HEADER.PAYLOAD). Варианты: 1. HEADER.PAYLOAD — как 2 строки через точку: Цитата: {«ver»:1,»typ»:»JWT»,»sbt»:»access»,»alg»:»GOST3410_2012_256″}.{«текст из PAYLOAD»} 2. HEADER.PAYLOAD — как 2 строки из токена, т.е. base64 Цитата: Открываю https://jwt.io/ ( т.е. вычисляется от значений (base64.base64) => и проверять тоже нужно также |
Техническую поддержку оказываем тут |
|
|
WWW |
Андрей * |
|
Статус: Сотрудник Группы: Участники Зарегистрирован: 26.07.2011(UTC) Сказал «Спасибо»: 451 раз |
Автор: PeterPan Автор: Андрей * Можете прислать пример токена и сертификат (в ЛС)? В личку отправить не могу, прикрепляю файлы, а они не прикрепляются. Ссылка на сервтификат https://esia.gosuslugi.ru/public/esia.zip имя ГОСТ ТЕСИА 2012.cer Я пробовал так ранее Цитата: private static bool VerifyRawSignString(string message, string signature, X509Certificate2Collection certificates) Gost3411_2012_256CryptoServiceProvider GostHash = new Gost3411_2012_256CryptoServiceProvider(); Возвращает false. signatureBytes — переверните байты и подпись будет проходить проверку |
Техническую поддержку оказываем тут |
|
|
WWW |
Андрей * |
|
Статус: Сотрудник Группы: Участники Зарегистрирован: 26.07.2011(UTC) Сказал «Спасибо»: 451 раз |
Ваш токен прошёл проверку В архиве — перевернутая подпись.
token.txt.extracted — HEADER.PAYLOAD (две строки в base64 с точкой, как разделитель) |
Техническую поддержку оказываем тут |
|
|
WWW |
|
PeterPan
оставлено 12.08.2020(UTC), lab2 оставлено 12.08.2020(UTC), ITSec_NSK оставлено 19.07.2022(UTC) |
PeterPan |
|
Статус: Новичок Группы: Участники Зарегистрирован: 11.08.2020(UTC) Сказал(а) «Спасибо»: 1 раз |
Огромное спасибо за наводку! Делюсь работающим кодом. Цитата: /// <summary> using (Gost3411_2012_256CryptoServiceProvider GostHash = new Gost3411_2012_256CryptoServiceProvider()) |
|
|
|
lab2
оставлено 12.08.2020(UTC), two_oceans оставлено 13.08.2020(UTC) |
Пользователи, просматривающие эту тему |
Guest |
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Pages 1
You must login or register to post a reply
1 2015.02.03 16:43
- PunBB
- Admin
- Offline
- More info
Topic: Невозможно подтвердить маркер доступа. Возможно, прошло некоторое…
Невозможно подтвердить маркер доступа. Возможно, прошло некоторое время после первого входа на страницу и последующей отправкой формы или щелчком по ссылке. Если это так, и вы хотите выполнить своё действие до конца, нажмите кнопку «Подтвердить». Для возврата на исходную страницу нужно нажать кнопку «Отменить».
Как подтвердить маркер доступа и что это такое? Маркер доступа позволяет проверить зашифрованную ссылку сравнивая откуда пришел пользователь и куда. Эта система была внедрена в качестве безопасности от атак хакеров и взломщиков.
Почему иногда на форуме может возникать следующее предупреждение?
На форуме PunBB у каждого посетителя имеется свой SCRF TOKEN который периодически меняется, когда посетитель некоторое время отсутствовал на форуме. Ну например, вы писали сообщение час, два, три… и при этом не открывали другие страницы во вкладках. Простыми словами страница ответа висела долгое время. И вот, спустя часов 6 вы все таки написали поэму и решили отправить ее на форум. Что происходит?
В форме уже имеется токен (можно посмотреть исходник страницы)
<input type="hidden" name="csrf_token" value="0b6ae337a22d083dde13057ce2ddf0528">
Но когда вы отправили страницу, то за то время пока вы писали сообщение токен поменялся и сравнив хеши функция обнаружила отличие токенов, что вызвало подозрение и предупреждение:
Невозможно подтвердить маркер доступа. Возможно, прошло некоторое время после первого входа на страницу и последующей отправкой формы или щелчком по ссылке. Если это так, и вы хотите выполнить своё действие до конца, нажмите кнопку «Подтвердить». Для возврата на исходную страницу нужно нажать кнопку «Отменить».
В этом случае система предлагает подтвердить отправку формы, то есть попытается обновить токен и не потеряв данные формы отправить написанное большими усилиями сообщение. Если все верно, сообщение будет отправлено, иначе система будет бесконечно выдавать предупреждение.
2 Reply by PunBB 2015.02.03 17:21
- PunBB
- Admin
- Offline
- More info
Re: Невозможно подтвердить маркер доступа. Возможно, прошло некоторое…
Иногда у начинающих программистов бывают случаи, когда данное предупреждение появляется из за не правильно оформленных ссылок в форме.
<input type="hidden" name="csrf_token" value="<?php echo generate_form_token(forum_link($forum_url['file_to'])) ?>" />
В данном случае переменная $forum_url[‘file_to’] должна быть равна абсолютной ссылке на файл куда отправляется $_POST или $_GET запрос.
Например, если вы отправляете форму скрипту файла settings.php находящегося по пути вот ссылка то
$forum_url['file_to'] = 'https://punbb.softplaza.net/settings.php';
или же непосредственно так:
<input type="hidden" name="csrf_token" value="<?php echo generate_form_token(forum_link('https://punbb.softplaza.net/settings.php')) ?>" />
3 Reply by PunBB 2015.02.03 17:28
- PunBB
- Admin
- Offline
- More info
Re: Невозможно подтвердить маркер доступа. Возможно, прошло некоторое…
Токен, или маркер доступа можно отключить либо на всех страницах либо только на требуемых.
На всех страницах отключить можно в файле config.php раскоментировав строку
// Disable forum CSRF checking by removing // from the following line
define('FORUM_DISABLE_CSRF_CONFIRM', 1);
Этого я вам крайне не рекомендую делать навсегда, а только лишь для того чтобы настроить скрипты или выявить неисправности.
Отключить в определенном файле токен можно прописав в самый вверх сразу после интерпретатора php тот же код:
define('FORUM_DISABLE_CSRF_CONFIRM', 1);
Но даже в этом случае будьте осторожны чтобы не забыть об этой определенной константе. Токен это безопасность вашего форума.
4 Reply by vladimir-timoshenko 2019.03.29 09:50
- vladimir-timoshenko
- Member
- Offline
- More info
Re: Невозможно подтвердить маркер доступа. Возможно, прошло некоторое…
форум 1.4.5
При регистрации или входе через смартфон, постоянно пишет «Невозможно подтвердить маркер доступа».
Новички при регистрации пугаются, думают, что что-то сделали не так…
Отключить токен в файле login.php?
А как же безопасность от хакеров?
5 Reply by PunBB 2019.03.29 10:44
- PunBB
- Admin
- Offline
- More info
Re: Невозможно подтвердить маркер доступа. Возможно, прошло некоторое…
vladimir-timoshenko wrote:
Отключить токен в файле login.php?
А как же безопасность от хакеров?
Если проект небольшой, то для хакеров вряд ли он будет интересным. Делайте бекапы, пока данная проблема не решена. Слышу об этом не в первый раз, возможно где то уже и есть решение, но самому некогда исследовать. Обычно это из за разных токенов генерируемых из урл, например в пост запрос поступает один урл, а на выходе другой. Вот оно сравнивая и выдает ошибку.
6 Reply by vladimir-timoshenko 2019.03.29 13:42
- vladimir-timoshenko
- Member
- Offline
- More info
Re: Невозможно подтвердить маркер доступа. Возможно, прошло некоторое…
Т.е., это проблема не у меня, а «вообще»
Понятно, спасибо! Бум надеяться на решение
7 Reply by PunBB 2019.03.29 14:21
- PunBB
- Admin
- Offline
- More info
Re: Невозможно подтвердить маркер доступа. Возможно, прошло некоторое…
Если немного есть навыки в php, то можно попробовать через print_r(); вывести получаемый урл после отправки пост запросом и сравнить что уходит и что получаем. Смотрите функцию csrf_token или что то вроде этого…
8 Reply by vladimir-timoshenko 2019.03.29 15:31
- vladimir-timoshenko
- Member
- Offline
- More info
Re: Невозможно подтвердить маркер доступа. Возможно, прошло некоторое…
увы, пока навыки только в «чуть чуть подредактировать»
Currently view post: 1 guest, 0 registered users
Pages 1
You must login or register to post a reply
При обмене кода на маркер доступа может возникнуть ряд дополнительных ошибок. Формат этих ответов зависит от передаваемого заголовка Accept.
Примечание. В этих примерах показаны только ответы JSON.
Неверные учетные данные клиента
Если передан неверный _идентификатор или секрет клиента_, вы получите этот ответ об ошибке.
{
"error": "incorrect_client_credentials",
"error_description": "The client_id and/or client_secret passed are incorrect.",
"error_uri": "/apps/managing-oauth-apps/troubleshooting-oauth-app-access-token-request-errors/#incorrect-client-credentials"
}
Чтобы устранить ошибку, убедитесь в наличии правильных учетных данных для OAuth App. Тщательно проверьте правильность значений client_id
и client_secret
и их передачи в GitHub.
Несоответствие URI перенаправления
Если вы указали redirect_uri
, который не совпадает с зарегистрированным в OAuth App, вы получите следующее сообщение об ошибке:
{
"error": "redirect_uri_mismatch",
"error_description": "The redirect_uri MUST match the registered callback URL for this application.",
"error_uri": "/apps/managing-oauth-apps/troubleshooting-authorization-request-errors/#redirect-uri-mismatch2"
}
Чтобы исправить эту ошибку, укажите redirect_uri
, который соответствует зарегистрированному, или оставьте этот параметр пустым, чтобы использовался зарегистрированный по умолчанию с приложением.
Неверный код проверки
{
"add_scopes": [
"repo"
],
"note": "admin script"
}
Если переданный код проверки неверен, просрочен или не соответствует тому, что вы получили в первом запросе на авторизацию, вы получите эту ошибку.
{
"error": "bad_verification_code",
"error_description": "The code passed is incorrect or expired.",
"error_uri": "/apps/managing-oauth-apps/troubleshooting-oauth-app-access-token-request-errors/#bad-verification-code"
}
Чтобы устранить ошибку, запустите процесс авторизации OAuth еще раз и получите новый код.
Как написано в How-To: Handle expired access tokens (ссылка не работает) статье в блоге разработчиков
Токены доступа для пользователей могут стать недействительными по различным причинам. В большинстве случаев они могут истечь, если прошло время, указанное в поле
expires
(по умолчанию токены доступа имеют срок жизни 2 часа). Многие разработчики не понимают, что срок действия маркера доступа также может истечь, если пользователь сменит пароль, выйдет из системы или деавторизует приложение через App Dashboard. Очень важно, чтобы ваши приложения справлялись с такими ситуациями. Если срок действия маркера доступа истек, вам необходимо заново получить действующий маркер доступа.
Раньше мы могли использовать разрешение offline_access
для получения токена, срок действия которого не истекает (если пользователь не подключен к приложению), но теперь это разрешение устарело, смотрите Deprecation of Offline Access Permission, чтобы узнать, как можно получить access_token
с более длительным сроком действия.
Обновление:.
С августа 2012 года Facebook PHP-SDK добавили простой способ продления access_token
(подробнее см. в Как продлить срок действия токена доступа после отмены offline_access).
Обновление 2:.
Обратите внимание, что оригинальный пост в блоге Facebook об обработке токенов с истекшим сроком действия больше не существует. Однако существует новая документация, которую можно использовать для получения подробной информации.
https://developers.facebook.com/docs/facebook-login/access-tokens/#extending
Проблема
При отправке документа на подпись в SalesForce возникает следующая ошибка:
Ошибка при обновлении маркера доступа: invalid_request: недопустимый маркер доступа
Среда
Причина
Из-за изменений, которые внесены администратором и которые могут повлиять на интеграцию Adobe Sign, выполняется отзыв маркера доступа.
Решение
Администратор SalesForce запускает мастер настройки Adobe Sign, используя учетные данные администратора Adobe Sign.
Необходимо выполнить следующие действия.
1. Выполните вход в учетную запись SalesForce и нажмите вкладку Администратор Adobe Sign.
2. Нажмите Запустить мастер настройки в разделе «Настройки учетной записи».
3. В шаге 1 «Привяжите свою учетную запись Adobe к Salesforce» в мастере настройки выполните вход с учетной записью администратора Adobe Sign.
4. В шаге 2 «Включите автоматические обновления статуса Adobe Sign» введите учетные данные SalesForce и нажмите кнопку Включить.
Дополнительная информация
Для запуска мастера настройки можно использовать только учетные данные администратора Adobe Sign.