Xamarin Forms 中的 MSAL 客户端流 Azure Function

MSAL Client flow Azure Function in Xamarin Forms

希望使用 MSAL 客户端流来授权访问我已配置为使用 Microsoft 身份验证的 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 错误,文档到处都是,我试图避免使用移动应用程序服务。

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

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

然后,我通过调用 LiveLoginResult.Session.AuthenticationToken 检查了 LiveSDK and tried to retrieve the LiveConnectSession.AuthenticationToken,但它 returns 为空。

然后,我检查了Microsoft Account 的server-flow 身份验证,发现它会使用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

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

然后,我尝试使用access_token进行日志记录,发现它可以工作。

Looking to use MSAL client flow to gain to authorize access to an Azure Function which I have configured to use Microsoft Authentication .

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

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

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

根据我的测试,您可以在 Microsoft Account Developer Center and add authentication info for your azure function app. For your client, you could use LiveSDK [deprecated] or 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可以参考Authentication Adapter for the OneDrive SDK.