Как получить строку client_assertion

Я написал приложение EWS на C++. В настоящее время он поддерживает обычную и NTLM-аутентификацию, теперь пытается поддерживать OAuth-аутентификацию.

Поскольку это приложение C++, я не могу использовать.NET AcquireToken, поэтому мне нужно опубликовать приведенный ниже запрос на проверку подлинности OAuth.

POST https://login.microsoftonline.com/b9bd2162xxx/oauth2/token HTTP / 1.1

Тип контента: application/x-www-form-urlencoded

ресурс = https://tailspin.onmicrosoft.com/surveys.webapi

& Client_id = 87df91dc-63de-4765-8701-b59cc8bd9e11

& Client_assertion_type= урна: IETF: PARAMS: OAuth: клиент-утверждение типа: JWT-носитель

& client_assertion = eyJhbGci...

& Grant_type = authorization_code

Итак, мой вопрос: если я создаю запрос, как я могу получить строку client_assertion? есть ли API\ библиотека с открытым исходным кодом для получения этой строки с использованием сертификата.pfx\X.509?

1 ответ

На основании стоимости grant_type, вы использовали поток авторизации кода авторизации. Этот поток используется для интерактивного приложения. Если вы хотите использовать этот поток, нет необходимости предоставлять client_assertion а также client_assertion_type,

Вы можете сослаться на запрос ниже об этом потоке.

1. Запросить код авторизации:

https://login.microsoftonline.com/{tenant}/oauth2/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=query
&resource=https%3A%2F%2Fservice.contoso.com%2F
&state=12345

2. Используйте код авторизации для запроса токена доступа:

POST /{tenant}/oauth2/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&client_id=2d4d11a2-f814-46a7-890a-274a72a7309e
&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrqqf_ZT_p5uEAEJJ_nZ3UmphWygRNy2C3jJ239gV_DBnZ2syeg95Ki-374WHUP-i3yIhv5i-7KU2CEoPXwURQp6IVYMw-DjAOzn7C3JCu5wpngXmbZKtJdWmiBzHpcO2aICJPu1KvJrDLDP20chJBXzVYJtkfjviLNNW7l7Y3ydcHDsBRKZc3GuMQanmcghXPyoDg41g8XbwPudVh7uCmUponBQpIhbuffFP_tbV8SNzsPoFz9CLpBCZagJVXeqWoYMPe2dSsPiLO9Alf_YIe5zpi-zY4C3aLw5g9at35eZTfNd0gBRpR5ojkMIcZZ6IgAA
&redirect_uri=https%3A%2F%2Flocalhost%2Fmyapp%2F
&resource=https%3A%2F%2Fservice.contoso.com%2F
&client_secret=p@ssw0rd

//NOTE: client_secret only required for web apps

Более подробно об этом потоке, пожалуйста, обратитесь к документу ниже:

Авторизуйте доступ к веб-приложениям с помощью OAuth 2.0 и Azure Active Directory

Обновить

string clientId = "";
string thumbprint = "";
X509Certificate2 cert = GetCertificate(thumbprint);
string resource = "";

string authority = "https://login.microsoftonline.com/{tenant}";
AuthenticationContext authContext = new AuthenticationContext(authority);
var resoult=  authContext.AcquireTokenAsync(resource, new ClientAssertionCertificate(clientId, cert)).Result;
Console.WriteLine(resoult.AccessToken);
Другие вопросы по тегам