Как защитить интеллектуальную собственность моего приложения на Autodesk Exchange - часть 2
В предыдущем посте , я представил новый API, который позволяет издателям проверять права пользователя при помощи userid и appId.Для веб-службы, самый простой способ - это попросить пользователя войти в вашу веб-службу при помощи логина Autodesk ID, у вас отпадает необходимость поддержки собственной системы пользователей. Как описано в предыдущем посте, вам необходимо указать «Вход в учетную запись Autodesk» при публикации веб-службы на Autodesk Exchange.
Теперь давайте создадим пример веб-службы, который позволит пользователям авторизоваться их Autodesk ID и проверить, имеет ли он право на использование этой веб-службы. В этом примере я буду использовать ASP.NET MVC для создания свой веб-службы. Чтобы включить аутентификацию пользователя по Autodesk ID, мне необходимо использовать OAuth - пожалуйста, изучите этот пример на GitHub для деталей.Если вы не изучили этот пример, я хотел бы предложить вам остановиться, скачать пример и запустить его на вашей стороне в первую очередь.
В этом примере давайте двигаться дальше. К тому моменту, когда аутентификация прошла успешно, мы можем получить userID пользователя, и тогда мы можем проверить его права с API, как мы представили это в предыдущем посте .
- public ActionResult AuthenticationSucceed(OAuthResult result)
- {
- //ViewBag.userId = result.oauth_user_guid;
- //return View(result);
- return RedirectToAction("CheckEntitlement", "License", result);
- }
Сейчас давайте посмотрим на операцию CheckEntitiement контроля лицензии:
- public ActionResult CheckEntitlement(OAuthResult result)
- {
- //get the appId from web.config
- string appId = ConfigurationManager.AppSettings["thisAppId"] == null
- ? ""
- : ConfigurationManager.AppSettings["thisAppId"];
- bool entitled = IsEntitledUser(result.oauth_user_guid, appId);
- if (entitled)
- {
- ViewBag.Message = "you are entitled to use this app.";
- UserInfo usrInfo = new UserInfo();
- usrInfo.IsLoggedIn = true;
- usrInfo.UserType = LoginType.AutodeskId;
- usrInfo.UserId = result.oauth_user_guid;
- usrInfo.UserName = result.oauth_user_name;
- return RedirectToAction("index", "Home", usrInfo);
- }
- else
- {
- ViewBag.Message = "you are not entitled to use this app. " +
- "please buy it from Autodesk Exchange store.";
- }
- return View();
- }
- private bool IsEntitledUser(string userId, string appId)
- {
- RestClient client = new RestClient(Constants.AUTODESK_EXCHANGE_URL);
- RestRequest req = new RestRequest(Constants.CHECK_ENTITLEMENT_ENDPOINT);
- req.Method = Method.GET;
- req.AddParameter("userid", userId);
- req.AddParameter("appid", appId);
- IRestResponse<EntitlementResult> resp= client.Execute<EntitlementResult>(req);
- if (resp.Data != null && resp.Data.IsValid)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- public const string AUTODESK_EXCHANGE_URL = "https://apps.exchange.autodesk.com";
- public const string CHECK_ENTITLEMENT_ENDPOINT = "webservices/checkentitlement";
А вот некоторые модели классов, которые вам, возможно, потребуется запустить в вашем проекте:
- namespace DummyService.Models
- {
- public class OAuthResult
- {
- public string AccessToken { get; set; }
- public string AccessTokenSecret { get; set; }
- public string oauth_user_name { get; set; }
- public string oauth_user_guid { get; set; }
- public string scope { get; set; }
- public string oauth_problem { get; set; }
- public string oauth_error_message { get; set; }
- public string sessionHandle { get; set; }
- }
- public class EntitlementResult
- {
- public string UserId { get; set; }
- public string AppId { get; set; }
- public bool IsValid { get; set; }
- public string Message { get; set; }
- }
- public enum LoginType
- {
- AutodeskId,
- CustomerUserId
- }
- public class UserInfo
- {
- public LoginType UserType { get; set; }
- public string UserId { get; set; }
- public string UserName { get; set; }
- public bool IsLoggedIn { get; set; }
- }
- }
При помощи этого фрагмента кода, мы можем проверить права пользователя после того как он войдет в систему с учетной Autodesk, вы можете периодически проверять права пользователя и даже проверять права для каждого вызова веб-службы - если вы предпочитаете строгую охрану лицензии. Надеюсь, что это было полезно для вас. Весь исходный код был размещен на GitHub .
Автор перевода: Daniel Du
Обсуждение: http://adn-cis.org/forum/index.php?topic=1861
Опубликовано 14.02.2015