繁体   English   中英

通过angular2中的IdentityServer3进行身份验证,并从asp.net mvc4访问webapi

[英]Authentication via IdentityServer3 in angular2 and access to webapi from asp.net mvc4

我尝试一起设置所有这些框架(从标题开始)。 到目前为止,我已经安装了IdentitySever3,并设法在我的angular 2应用程序中的登录按钮上获得了登录屏幕。

成功登录后,我从身份验证服务器收到令牌,现在我想从ASP.Net WebApi(.Net 4.6.2)询问一些数据。

而且我有一个问题。 我应该如何配置此服务器应用程序,使其能够理解来自角度应用程序的已发送令牌中的数据。 大多数教程都介绍.Net核心。 任何人都可以给我展示一些例子,或者说出我所缺少的。

您在问一个非常笼统的问题,但是以下指针可能会有所帮助:

看看https://github.com/IdentityServer/IdentityServer3.Samples。您应该编写普通的.Net WebApi,并且基本上需要进行两个更改:1.像示例之一一样,在服务器上实现“启动”类( https: //github.com/IdentityServer/IdentityServer3.Samples/blob/master/source/WebHost%20(Windows%20Auth)/WebHost/Startup.cs )。 2.添加要添加到每个控制器/ Web方法上的[身份验证]属性。

并且在angular应用程序上(示例来自angular1,但应该清楚),您需要在每个请求中将令牌发送给int Authorization标头:

您在模块声明后放置的这段代码

.config(($httpProvider: ng.IHttpProvider) => {
        $httpProvider.interceptors.push("authInterceptorService");
    })

然后你做的功能

export function authInterceptorService($q, $rootScope, $location) {
    return {
        request,
        responseError
    };

    function request(config) {
        config.headers = config.headers || {};

        if (!_.startsWith(config.url, **URLtoYourApi**)) {
            return config;
        }
        config.headers.authorization = "Bearer " + **access token**;
        return config;
    }

    function responseError(rejection) {
        if (rejection.status === 401) {
            // do some rejection logic
            $location.path("/");
        }
        return $q.reject(rejection);
    }
}

这样,您将在每个请求上发送令牌=> 访问令牌 (可以存储在本地存储中)。 显然标记...意味着您需要用一些东西来代替:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM