0

希望使用 MSAL 客户端流来获得授权访问我已配置为使用 Microsoft Authentication 的 Azure 功能。

我添加了 MSAL 的最新预览版,并且可以登录并获得对 Graph API 的访问权限

 App.TokenRequest = await App.IdentityClientApp.AcquireTokenAsync(App.Scopes,App.UiParent)
 var client = new System.Net.Http.HttpClient();
 var request = new HttpRequestMessage(HttpMethod.Post, "https://{my site url}/.auth/login/microsoftaccount");  

request.Content = new StringContent(JsonConvert.SerializeObject(new TokenContent { access_token= App.TokenRequest.AccessToken }));
 var response = await client.SendAsync(request);

任何想法都会有所帮助,当我在浏览器中导航到身份验证页面时,我会得到服务器端流程。但是上面的客户端请求总是产生 401 错误,文档到处都是,我试图避免使用移动应用服务。

4

1 回答 1

1

Client-managed authentication - Live SDK中,我们可以发现您需要传递以下有效负载以进行日志记录:

{"authenticationToken":"{Live-SDK-session-authentication-token}"} 

然后,我检查了LiveSDK并尝试通过调用来检索LiveConnectSession.AuthenticationTokenLiveLoginResult.Session.AuthenticationToken,但它返回 null。

然后,我检查了 Microsoft 帐户的服务器流身份验证,发现它会使用Live SDK REST API - Signing users in with REST。我试图通过邮递员模拟身份验证请求来验证这个问题。这是我检索访问令牌的测试:

https://login.live.com/oauth20_authorize.srf?client_id={client-id}&redirect_uri={return-url}&response_type=code&scope=wl.basic+wl.offline_access+wl.signin

在此处输入图像描述

如您所见,我们无法检索authentication_token官方文档中提到的Get an access token 和 an authentication token

然后,我尝试access_token如下使用 for logging,发现它可以工作。

在此处输入图像描述

希望使用 MSAL 客户端流来获得授权访问我已配置为使用 Microsoft Authentication 的 Azure 功能。

对于 MSAL,您会发现它会向以下端点发送请求,{"authenticationToken":"App.TokenRequest.AccessToken"}并且{"access_token":"App.TokenRequest.AccessToken"}负载都无法成功登录。

https://login.microsoftonline.com/common/oauth2/v2.0/authorize

根据我的测试,由于 Microsoft 的身份验证/授权使用不同的身份验证端点,因此每个端点生成的令牌无法相互应用。

根据我的测试,您可以在Microsoft 帐户开发人员中心创建您的应用并为您的 azure 函数应用添加身份验证信息。对于您的客户端,您可以使用LiveSDK [已弃用] 或OneDrive SDK for CSharp进行 MSA 日志记录,并access_token使用您的 azure 函数应用程序检索日志记录。这是我使用 OneDrive SDK 进行日志记录的 UWP 客户端,您可以参考:

var msAuth = new MsaAuthenticationProvider(
    "{app-Id}", //application id of your app
    "urn:ietf:wg:oauth:2.0:oob", //the redirect url for your native application in your app
    new string[] { "wl.signin", "offline_access" });
await msAuth.AuthenticateUserAsync();

在此处输入图像描述

对于MsaAuthenticationProvider,您可以参考OneDrive SDK 的身份验证适配器

于 2017-06-21T11:00:55.977 回答