Я новичок в OAuth и использовал этот учебник для генерации токена доступа из клиентского приложения в целевое приложение.Сам код работает нормально, но сгенерированный токен доступа имеет invalid signature
, когда я декодировал на https://jwt.io/
Вот код из учебника
public class ServicePrincipal
{
/// <summary>
/// The variables below are standard Azure AD terms from our various samples
/// We set these in the Azure Portal for this app for security and to make it easy to change (you can reuse this code in other apps this way)
/// You can name each of these what you want as long as you keep all of this straight
/// </summary>
static string authority = ""; // the AD Authority used for login. For example: https://login.microsoftonline.com/myadnamehere.onmicrosoft.com
static string clientId = ""; // client app's client id
static string clientSecret = ""; // client app's secret key
static string resource = ""; // target app's App ID URL
/// <summary>
/// wrapper that passes the above variables
/// </summary>
/// <returns></returns>
static public async Task<AuthenticationResult> GetS2SAccessTokenForProdMSAAsync()
{
return await GetS2SAccessToken(authority, resource, clientId, clientSecret);
}
static async Task<AuthenticationResult> GetS2SAccessToken(string authority, string resource, string clientId, string clientSecret)
{
var clientCredential = new ClientCredential(clientId, clientSecret);
AuthenticationContext context = new AuthenticationContext(authority, false);
AuthenticationResult authenticationResult = await context.AcquireTokenAsync(
resource, // the resource (app) we are going to access with the token
clientCredential); // the client credentials
return authenticationResult;
}
}
Естья обнаружил еще один фрагмент кода, который также может генерировать токен доступа:
AuthenticationContext authenticationContext =
new AuthenticationContext({authority});
ClientCredential clientCredential = new ClientCredential({client app id}, {client app secret});
try
{
AuthenticationResult result =
await authenticationContext.AcquireTokenAsync({target app's App ID URL},
clientCredential);
}
catch (Exception e)
{
return false;
}
Оба кода дали мне недопустимый токен доступа для подписи версии 1.0
Здесь есть две проблемы:
Я заметил, что когда я декодирую токен доступа, он показывает "ver": "1.0"
.Означает ли это, что использует OAuth1.0?Потому что я предполагаю использовать OAuth 2.0 .. Почему код генерирует токен, который создает OAuth1.0, а не OAuth2.0?
Почему это недействительная подпись?