0

Rasp Pi 2 で (モニターを使用して) 向かって実行しているプロジェクトがあり、それをインターネットに接続しているため、サードパーティがホストするサービスや Azure で立ち上げたサービスからデータを取得できます。

REST 呼び出しはすべて正常に機能しています。ただし、Google カレンダー呼び出しの oAuth 部分は、私の開発マシンと、組み込みのブラウザーを備えた他のマシンでのみ機能します。

開発マシンでのデバッグ実行から生成されたトークンを保存し、それを RP2 への展開に取り込む方法はありますか?

.sln ビルド アクションに client_secret.json ファイル プロパティがあります = コンテンツと出力ディレクトリにコピー = 常にコピー

私の開発マシンで動作するコード:

var credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                        new Uri("ms-appx:///client_secret.json"),
                        new[] { Uri.EscapeUriString(CalendarService.Scope.Calendar) },
                        calendarOwner,
                        CancellationToken.None);

        var calendarService = new CalendarService(new BaseClientService.Initializer
        {
            HttpClientInitializer = credential,
            ApplicationName = "myappname"
        });

        var calendarListResource = await calendarService.CalendarList.List().ExecuteAsync();

これを rp2 で実行する方法についてのヘルプや洞察をいただければ幸いです。これは、rp2 + win10iot に関する私の最初の大きな試みです。

更新: 私が受け取っている例外は次のとおりです: エラー:"UserCancel"、説明:"WebAuthenticationBroker はコードまたはエラーを返しませんでした。詳細:0"、Uri:"" axecuting 時に catch ブロックに直接ジャンプしますAuthorizeAsync() メソッド。

4

1 に答える 1

1

【追記】参考になる情報がありました。OAuth による認証は、ブラウザ ウィンドウによって提供されます。Win 10 IOT にはブラウザが含まれていないため、それは不可能です。このブログ投稿によると、ここで説明されている他のデバイスを使用して、ヘッドレス認証を実装しようとしています。

[古い投稿] 申し訳ありませんが、現時点では役に立ちませんが、この問題の解決策も探しています。WebAccountProvider を使用して Azure AD に対して認証を試みます。ローカル マシンへの展開は問題なく動作しますが、Windows 10 IOT を実行している RaspberryPi への展開中に、資格情報を入力するための "Windows" が開かれません!

私のコード ( Jason Lattimersのブログ投稿によると):

public static class CurrentEnvironment
{
    # region Class Level Members
    private const string _clientID = "[MYCLIENTID]";
    public const string CrmServiceUrl = "https://MYCRMORG.crm4.dynamics.com";
    private const string _authority = "https://login.microsoftonline.com/common/oauth2/authorize";
    private static string _accessToken;

    # endregion

    public static async Task<string> Initialize()
    {
        //var redirect = GetAppRedirectURI();
        try
        {
            WebAccountProvider wap =
                    await WebAuthenticationCoreManager.FindAccountProviderAsync("https://login.microsoft.com", _authority);

            WebTokenRequest wtr = new WebTokenRequest(wap, string.Empty, _clientID);
            wtr.Properties.Add("resource", CrmServiceUrl);
            WebTokenRequestResult wtrr = await WebAuthenticationCoreManager.RequestTokenAsync(wtr);

            if (wtrr.ResponseStatus == WebTokenRequestStatus.Success)
            {
                _accessToken = wtrr.ResponseData[0].Token;
            }

        }
        catch (Exception ex)
        {

        }

        return _accessToken;}
于 2016-02-03T07:50:03.093 に答える