Web API和MVC中的Azure移动服务令牌验证

本文关键字:移动 服务 令牌 验证 Azure 中的 API MVC Web | 更新日期: 2023-09-27 18:28:08

我有一个Xamarin移动应用程序,它使用Azure移动服务SDK来针对社交提供商对用户进行身份验证。我获取令牌并将其作为承载令牌附加到命中Web API ASP.NET应用程序(我正在部署为Azure云服务)的http请求。

我需要验证承载令牌,并在我的ApiController中获得一个ClaimsIdentity。我需要使用移动服务.NET后端nuget包吗?我该怎么办?

编辑:

  1. 创建了一个空的ASP.NET应用程序添加了一个Web API控制器

  2. 已安装移动服务.NET后端nuget包

  3. 为密钥MS_MobileServiceName、MS_MasterKey和,Azure管理控制台中值的MS_ApplicationKey

  4. 在我的HttpGet操作上设置[AuthorizeLevel(AuthorizationLevel.User)]在我的ApiController 中

  5. 铸造用户到服务用户

  6. 通过Azure从Google Auth创建带有承载令牌的http请求移动服务SDK

  7. 用户为空!

Web API和MVC中的Azure移动服务令牌验证

使用等属性

[AuthorizeLevel(AuthorizationLevel.Anonymous)]
[AuthorizeLevel(AuthorizationLevel.User)]

在API中的方法上验证,具体取决于您想要的角色。

然后使用

var currentUser = User as ServiceUser;

若AuthorizationLevel不是Anonymous,则获取方法中的当前用户。

并根据需要设置您的AppSettings。如果要在localhost上测试MobileService,请更改MasterKey和ApplicationKey。

 <appSettings>
    <!-- Use these settings for local development. After publishing to 
    Mobile Services, these settings will be overridden by the values specified
    in the portal. -->
    <add key="MS_MobileServiceName" value="[NAME HERE]" />
    <add key="MS_MasterKey" value="[INSERT HERE]" />
    <add key="MS_ApplicationKey" value="[INSERT HERE]" />
    <add key="MS_MicrosoftClientID" value="Overridden by portal settings" />
    <add key="MS_MicrosoftClientSecret" value="Overridden by portal settings" />
    <add key="MS_FacebookAppID" value="Overridden by portal settings" />
    <add key="MS_FacebookAppSecret" value="Overridden by portal settings" />
    <add key="MS_GoogleClientID" value="Overridden by portal settings" />
    <add key="MS_GoogleClientSecret" value="Overridden by portal settings" />
    <add key="MS_TwitterConsumerKey" value="Overridden by portal settings" />
    <add key="MS_TwitterConsumerSecret" value="Overridden by portal settings" />
    <add key="MS_AadClientID" value="Overridden by portal settings" />
    <add key="MS_AadTenants" value="Overridden by portal settings" />
    <!-- When using this setting, be sure to also set the Notification Hubs connection
    string named "MS_NotificationHubConnectionString". -->
    <add key="MS_NotificationHubName" value="Overridden by portal settings" />
    <add key="Microsoft.ServiceBus.ConnectionString" value="Endpoint=sb://[your namespace].servicebus.windows.net;SharedSecretIssuer=owner;SharedSecretValue=[your secret]" />
  </appSettings>