2017-06-20 47 views
0

寻求使用MSAL客户端流来获得授权访问我配置为使用Microsoft身份验证的Azure功能。MSAL客户端流Xamarin表单中的Azure函数

我已经添加MSAL的最新预览,并且可以登录并获得对图形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); 

任何想法将是有益的,当我浏览到在浏览器中我得到的AUTH页面访问服务器端流量。但上面的客户端请求总会产生401错误,文档遍布各处,我试图避免使用移动应用程序服务。

回答

0

Client-managed authentication - Live SDK,我们可以发现,你需要通过以下的有效载荷进行日志记录:

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

然后,我检查LiveSDK,并试图通过调用LiveLoginResult.Session.AuthenticationToken检索LiveConnectSession.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

enter image description here

正如你可以看到,我们不能作为正式文件有关Get an access token and an authentication token中提到检索authentication_token

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

enter image description here

希望使用MSAL客户端流量获得授权访问,我已配置为使用微软认证的Azure的功能。

对于MSAL,你会发现它会发出针对以下端点都{"authenticationToken":"App.TokenRequest.AccessToken"}{"access_token":"App.TokenRequest.AccessToken"}有效载荷无法成功登录请求。

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

按我的测试,因为认证/授权微软使用不同的身份验证的端点,每个端点生成的令牌无法被应用到对方。

基于我的测试,您可以在Microsoft Account Developer Center上创建应用程序,并为您的天青功能应用程序添加验证信息。对于您的客户,您可以使用LiveSDK [已弃用]或OneDrive SDK for CSharp进行MSA日志记录,并检索access_token以使用您的天青功能应用程序进行日志记录。这是我与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(); 

enter image description here

MsaAuthenticationProvider,你可以参考Authentication Adapter for the OneDrive SDK

+0

我会给onedrive sdk一个去,但它看起来像问题的核心是因为MSAL的目标是新的终点,我不能使用我可以在门户中的App服务上设置的简单授权。我可以在OneDrive SDK中同时使用工作和个人帐户吗? – snowCrabs

+0

根据我的测试,对于在[Microsoft应用程序注册门户](https://apps.dev.microsoft.com/)上注册的应用程序,它可以与Microsoft帐户一起使用。对于在[Microsoft Azure Active Directory](https://manage.windowsazure.com/)上注册的应用程序,它将支持您的租户的工作或学校用户。有关更多详细信息,请参阅[OneDrive SDK的身份验证适配器](https://github.com/OneDrive/onedrive-sdk-dotnet-msa-auth-adapter)。 –

+1

根据我的理解,现在,MSAL无法使用来自Azure App Service的身份验证/授权。 –