2017-06-20 15 views
0

Microsoft認証を使用するように設定したAzure関数へのアクセスを許可するためにMSALクライアントフローを使用します。MSALクライアントフローAzure関数(Xamarinフォーム)

IましMSALの最新プレビューを追加して、ログインし、私は私が手ブラウザでの認証ページに移動

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); 

任意のアイデアが参考になるグラフAPIへのアクセスを得ることができますサーバー側のフロー。上記のクライアントリクエストでは常に401エラーが発生しますが、ドキュメントはどこにでもあり、私はMobile App Serviceの使用を避けようとしていました。

答えて

0

Client-managed authentication - Live SDKから、我々はあなたが伐採については、以下のペイロードを渡す必要があることを見つけることができる:

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

その後、私はLiveSDKをチェックしLiveLoginResult.Session.AuthenticationTokenを呼び出すことによってLiveConnectSession.AuthenticationTokenを取得しようとしたが、それはnullを返します。

次に、Microsoft Accountのサーバーフロー認証を確認し、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を使用しようとしましたが、動作する可能性があります。私はマイクロソフトの認証を使用するように設定されているAzureの機能へのアクセスを許可するために得るためにMSALクライアント・フローを使用してみる

enter image description here

。 MSALについては

、あなたはそれが次のエンドポイントに対して要求を送信し、両方の{"authenticationToken":"App.TokenRequest.AccessToken"}{"access_token":"App.TokenRequest.AccessToken"}ペイロードが正常にログインすることができませんでした見つけることができます。私のテストパー

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

マイクロソフトのための認証/承認が異なる認証エンドポイントを使用しているため、各エンドポイントによって生成されたトークンは、相互に適用することができませんでした。

私のテストに基づいて、Microsoft Account Developer Centerにあなたのアプリを作成して、あなたの晴れた機能アプリの認証情報を追加するだけでよいのです。クライアントの場合は、MSAロギングにはLiveSDK [非推奨]またはOneDrive SDK for CSharpを使用し、アシルファンクションアプリでログするにはaccess_tokenを取得できます。ここでOneDrive SDKにログインするための私のUWPクライアントである、あなたはそれを参照することができます:MsaAuthenticationProviderについて、あなたはAuthentication Adapter for the OneDrive SDKを参照してください可能性があり

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

+0

私はonedrive sdkを行っていますが、MSALが新しいエンドポイントをターゲットにしているので、問題の中心にあるようです。ポータルのAppサービスで設定できる簡単な認証を使用できません。 OneDrive SDKで職場と個人の両方のアカウントを使用できますか? – snowCrabs

+0

私のテストでは、[Microsoft Application Registration Portal](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のAuthentication/Authorizationでは動作しませんでした。 –

関連する問題