2017年6月17日

Cortana與企業端驗證

新的Cortana ChannelBot Framework建立的對話機器人利用Windows 10, iOSAndroid上的Cortana與使用者透過語音對話。

Cortana Channel也提供了內建的OAuth 2.0驗證機制,讓機器人服務通過驗證的使用者,在企業情境下非常有用。

啟用Cortana OAuth支援的方式在官方網站上已經有詳細的說明:https://docs.microsoft.com/en-us/cortana/tutorials/bot-skills/bot-skill-auth;一個比較需要注意的地方是,如果是透過Bot Builder建立的機器人,在一開始撰寫時應該已經註冊過Microsoft App了;此時,不需要再如文件上的說明建立一個新的App,只需要到https://apps.dev.microsoft.com找到先前登入好的機器人然後設定新的平台即可。

  1. 登入https://apps.dev.microsoft.com/#/appList
  2. 找到先前登錄的Bot

  1. 新增一個平台

  1. 選擇Web

  1. 設定Redirect URLhttps://www.bing.com/agents/auth

  1. 儲存
  2. 接著回到https://dev.botframework.com
  3. 啟用Cortana Channel
  4. Cortana設定頁面,啟用身分管理

  1. 設定值基本上和官方網站上的說明相同,除了Cliend IClient Secret要使用先前建立好的Id/Secret;也就是在Web.Config裡的MicrosoftAppIdMicrosoftAppPassword

另外,AuthorizeToken URL務必要依照下方說明填寫

  1. Scope欄位填入User.Read offline_access openid

  1. 接著,指定我們需要存取的使用者資料

  1. 存檔後,就可以在Cortana測試了
  2. 開啟Cortana,連接我們的機器人後,會跳出登入視窗;在程式中可以透過下面的代碼取得OAuth 2.0 Token

var tokenEntity = activity.AsMessageActivity().Entities.Where(e => e.Type.Equals("AuthorizationToken")).SingleOrDefault();

var token = tokenEntity.Properties

.Value<string>("token");

if (token != null){

var jwt = new JwtSecurityToken(token);

var log = string.Join(" | ", jwt.Payload.Claims.ToArray()

.Select(c => c.Type + ":" + c.Value).ToArray());

Trace.TraceInformation(log);

}

  1. Activity物件的Entities中,可以取得使用者的相關資料,例如NameEmail

 

{

  "type": "message",

  //…省略

  "entities": [

    {

     "type": "Intent",

      "name": "None",

      "entities": []

    },

    {

      "type": "AuthorizationToken",

      "token": "<token>",

      "status": 0

    },

    {

      "type": "UserInfo",

      "Name": {

        "GivenName": "",

        "FamilyName": ""

      },

      "Email": "xxx@msn.com"

    },

    {

      "type": "DeviceInfo",

      "supportsDisplay": "true"

    }

  ],

  //…省略

}

 

沒有留言:

About Me