ADN Open CIS
Сообщество программистов Autodesk в СНГ

14/02/2015

Как защитить интеллектуальную собственность моего приложения на Autodesk Exchange - часть 2

В предыдущем посте , я представил новый API, который позволяет издателям проверять права пользователя при помощи userid и appId.Для веб-службы, самый простой способ - это попросить пользователя войти в вашу веб-службу при помощи логина Autodesk ID, у вас отпадает необходимость поддержки собственной системы пользователей. Как описано в предыдущем посте, вам необходимо указать «Вход в учетную запись Autodesk» при публикации веб-службы на Autodesk Exchange.

Теперь давайте создадим пример веб-службы, который позволит пользователям авторизоваться их Autodesk ID и проверить, имеет ли он право на использование этой веб-службы. В этом примере я буду использовать ASP.NET MVC для создания свой веб-службы. Чтобы включить аутентификацию пользователя по Autodesk ID, мне необходимо использовать OAuth - пожалуйста, изучите   этот пример на GitHub   для деталей.Если вы не изучили этот пример, я хотел бы предложить вам остановиться, скачать пример и запустить его на вашей стороне в первую очередь.

В этом примере давайте двигаться дальше. К тому моменту, когда аутентификация прошла успешно, мы можем получить userID пользователя, и тогда мы можем проверить его права с API, как мы представили это в предыдущем посте .

Код - C#: [Выделить]
  1. public ActionResult AuthenticationSucceed(OAuthResult result)
  2. {
  3.     //ViewBag.userId = result.oauth_user_guid;
  4.     //return View(result);
  5.     return RedirectToAction("CheckEntitlement", "License", result);
  6. }

Сейчас давайте посмотрим на операцию CheckEntitiement контроля лицензии:

Код - C#: [Выделить]
  1. public ActionResult CheckEntitlement(OAuthResult result)
  2. {
  3.     //get the appId from web.config
  4.     string appId = ConfigurationManager.AppSettings["thisAppId"] == null
  5.         ? ""
  6.         : ConfigurationManager.AppSettings["thisAppId"];
  7.       
  8.     bool entitled = IsEntitledUser(result.oauth_user_guid, appId);
  9.     if (entitled)
  10.     {
  11.         ViewBag.Message = "you are entitled to use this app.";
  12.         UserInfo usrInfo = new UserInfo();
  13.         usrInfo.IsLoggedIn = true;
  14.         usrInfo.UserType = LoginType.AutodeskId;
  15.         usrInfo.UserId = result.oauth_user_guid;
  16.         usrInfo.UserName = result.oauth_user_name;
  17.         return RedirectToAction("index", "Home", usrInfo);
  18.     }
  19.     else
  20.     {
  21.         ViewBag.Message = "you are not entitled to use this app. " +
  22.         "please buy it from Autodesk Exchange store.";
  23.     }
  24.     return View();
  25. }
  26. private bool IsEntitledUser(string userId, string appId)
  27. {
  28.         RestClient client = new RestClient(Constants.AUTODESK_EXCHANGE_URL);
  29.     RestRequest req = new RestRequest(Constants.CHECK_ENTITLEMENT_ENDPOINT);
  30.     req.Method = Method.GET;
  31.     req.AddParameter("userid", userId);
  32.     req.AddParameter("appid", appId);
  33.     IRestResponse<EntitlementResult> resp= client.Execute<EntitlementResult>(req);
  34.     if (resp.Data != null && resp.Data.IsValid)
  35.     {
  36.         return true;
  37.     }
  38.     else
  39.     {
  40.         return false;
  41.     }
  42. }
  43. public const string AUTODESK_EXCHANGE_URL = "https://apps.exchange.autodesk.com";
  44. public const string CHECK_ENTITLEMENT_ENDPOINT = "webservices/checkentitlement";

А вот некоторые модели классов, которые вам, возможно, потребуется запустить в вашем проекте:

Код - C#: [Выделить]
  1. namespace DummyService.Models
  2. {
  3.     public class OAuthResult
  4.     {
  5.         public string AccessToken { get; set; }
  6.         public string AccessTokenSecret { get; set; }
  7.         public string oauth_user_name { get; set; }
  8.         public string oauth_user_guid { get; set; }
  9.         public string scope { get; set; }
  10.         public string oauth_problem { get; set; }
  11.         public string oauth_error_message { get; set; }
  12.         public string sessionHandle { get; set; }
  13.     }
  14.     public class EntitlementResult
  15.     {
  16.         public string UserId { get; set; }
  17.         public string AppId { get; set; }
  18.         public bool IsValid { get; set; }
  19.         public string Message { get; set; }
  20.     }
  21.     public enum LoginType
  22.     {
  23.         AutodeskId,
  24.         CustomerUserId
  25.     }
  26.     public class UserInfo
  27.     {
  28.         public LoginType UserType { get; set; }
  29.         public string UserId { get; set; }
  30.         public string UserName { get; set; }
  31.         public bool IsLoggedIn { get; set; }
  32.     }
  33. }

При помощи этого фрагмента кода, мы можем проверить права пользователя после того как он войдет в систему с учетной Autodesk, вы можете периодически проверять права пользователя и даже проверять права для каждого вызова веб-службы - если вы предпочитаете строгую охрану лицензии. Надеюсь, что это было полезно для вас. Весь исходный код был размещен на   GitHub .

Источник: http://adndevblog.typepad.com/cloud_and_mobile/2014/04/how-to-protect-my-intellectual-property-of-my-app-on-autodesk-exchange-part-2.html

Автор: Daniel Du
Автор перевода: Daniel Du

Обсуждение: http://adn-cis.org/forum/index.php?topic=1861

Опубликовано 14.02.2015