Api 的自定义身份验证 Azure 移动服务

     2023-02-19     159

关键词:

【中文标题】Api 的自定义身份验证 Azure 移动服务【英文标题】:Custom Authentication Azure Mobile Services by Api 【发布时间】:2014-03-12 21:56:14 【问题描述】:

我正在通过 Azure 移动服务上的 API 创建自定义身份验证,并根据以下答案进行选择:

Registering and login users in Azure Mobile Services

然后加入上一个链接的代码来创建认证令牌。

但是当我调用 API 时出现“内部服务器错误”。错误发生在这里:“...results.length...”

    var crypto = require('crypto');
    var iterations = 1000;
    var bytes = 32;
    var aud = "Custom";
    var masterKey = "wkeHEoWUaPJSHsSOcWgmVLOZbIpeeg92";
    var _request;
    var _response;

    exports.post = function(request, response) 
        var user = request.body.userName;
        var pass = request.body.password;
        _request = request;
        _response = response
        validateUserNamePassword(user, pass, function(error, userId, token) 
            if (error) 
                response.send(401,  error: "Unauthorized" );
             else 
                response.send(200,  user: userId, token: token );
            
        );
    

    function validateUserNamePassword(user, pass, funcao)

        var accounts = _request.service.tables.getTable('account');

        accounts
            .where( userid : user )
            .read(
                success: function(results) 
                
                    if (results.length === 0) 
                    
                        _response.send(401,  error: "Unauthorized1" );
                        console.log("Incorrect username or password");
                        _request.respond(401, "Incorrect username or password");
                    
                    else 

                        _response.send(401,  error: "Unauthorized2" );
                        var account = results[0];
                        hash(item.password, account.salt, function(err, h) 
                            var incoming = h;
                            if (slowEquals(incoming, account.password)) 
                                var expiry = new Date().setUTCDate(new Date().getUTCDate() + 30);
                                var userId = aud + ":" + account.id;
                                _request.respond(200, 
                                    userId: userId,
                                    token: zumoJwt(expiry, aud, userId, masterKey) 
                                );
                            
                            else 
                                _request.respond(401, "Incorrect username or password");
                            
                        );
                    
                
            );
    



    function hash(text, salt, callback) 
        crypto.pbkdf2(text, salt, iterations, bytes, function(err, derivedKey)
            if (err)  callback(err); 
            else 
                var h = new Buffer(derivedKey).toString('base64');
                callback(null, h);
            
        );
    

    function slowEquals(a, b) 
        var diff = a.length ^ b.length;
        for (var i = 0; i < a.length && i < b.length; i++) 
            diff |= (a[i] ^ b[i]);
        
        return diff === 0;
    

    function zumoJwt(expiryDate, aud, userId, masterKey) 

        var crypto = require('crypto');

        function base64(input) 
            return new Buffer(input, 'utf8').toString('base64');
        

        function urlFriendly(b64) 
            return b64.replace(/\+/g, '-').replace(/\//g, '_').replace(new RegExp("=", "g"), '');
        

        function signature(input) 
            var key = crypto.createHash('sha256').update(masterKey + "JWTSig").digest('binary');
            var str = crypto.createHmac('sha256', key).update(input).digest('base64');
            return urlFriendly(str);
        

        var s1 = '"alg":"HS256","typ":"JWT","kid":0';
        var j2 = 
            "exp":expiryDate.valueOf() / 1000,
            "iss":"urn:microsoft:windows-azure:zumo",
            "ver":1,
            "aud":aud,
            "uid":userId 
        ;
        var s2 = JSON.stringify(j2);
        var b1 = urlFriendly(base64(s1));
        var b2 = urlFriendly(base64(s2));
        var b3 = signature(b1 + "." + b2);
        return [b1,b2,b3].join(".");
    

我是这样调用的:

        try 
         
            var loginInput = new JObject();
            loginInput.Add("userName", "breno");
            loginInput.Add("password", "test");
            var loginResult = await LoginAuthenticationService.InvokeApiAsync("login", loginInput);
            LoginAuthenticationService.CurrentUser = new MobileServiceUser((string)loginResult["user"]);
            LoginAuthenticationService.CurrentUser.MobileServiceAuthenticationToken = (string)loginResult["token"];
        
        catch (MobileServiceInvalidOperationException e)
        
            var exception = e;
        

【问题讨论】:

如果您放入“console.log(results);”,您会在日志中看到什么在检查长度之前打电话?您确定 request.body.userName 包含用户名吗? @Chris 我用我调用的方式更新了帖子,我做错了什么?感谢您的帮助! 听起来请求正在发送到您的自定义 API,因为您获得了 500。如果您在帖子开头执行 console.log(request.body),您会看到什么方法? @Chris 我把 console.log(request.body) 像你说的那样放在日志上:“无法加载脚本文件'login.js':SyntaxError: Unexpected token ” 你在validateUserNamePassword/accounts.read/success中的else之后缺少 【参考方案1】:

如果您在 cmets 中看到此错误“无法加载脚本文件 'login.js': SyntaxError: Unexpected token ”,则说明您的脚本存在语法问题。您需要检查您的脚本并找出问题所在。

【讨论】:

Kong API 网关中的自定义身份验证服务

】KongAPI网关中的自定义身份验证服务【英文标题】:CustomAuthenticationServiceinKongAPIGateway【发布时间】:2018-01-1901:20:06【问题描述】:我们目前正在为我们的微服务分析API网关,而Kong是可能的候选者之一。我们发现Kong支持多个身... 查看详情

Azure 应用服务:自定义身份验证和社交提供程序

】Azure应用服务:自定义身份验证和社交提供程序【英文标题】:AzureAppService:CustomAuthentication&Socialproviders【发布时间】:2017-04-2323:00:46【问题描述】:我正在使用Azure移动应用服务进行开发,并且想知道自定义身份验证和可用... 查看详情

在移动应用中使用 AAD 自定义登录验证 Azure 应用服务

】在移动应用中使用AAD自定义登录验证Azure应用服务【英文标题】:AuthenticateAzureappservicewithAADcustomlogininmobileapp【发布时间】:2018-08-0903:10:03【问题描述】:我已经为移动应用创建了应用服务。然后我将身份验证添加到应用服务... 查看详情

Azure 移动应用服务安全

...一个Azure移动应用服务,问题是我正在尝试为它实施“自定义”身份验证(自定义身份验证的原因是我有一个使用相同数据库并将REST请求发送到移动服务应用程序更新数据库,它们都使用asp.net身份)但是在 查看详情

Azure 移动应用身份验证自定义

】Azure移动应用身份验证自定义【英文标题】:Azuremobileappauthenticationcustom【发布时间】:2017-04-2701:28:37【问题描述】:我们设计了具有自定义安全性的azure移动应用后端,它接受用户用于azure活动目录的用户名和密码,然后用户... 查看详情

移动设备上的 Azure App Service 身份验证问题

】移动设备上的AzureAppService身份验证问题【英文标题】:AzureAppServiceauthenticationissueonmobiledevice【发布时间】:2019-11-1823:51:37【问题描述】:我创建了一个.NETCore2.1WebAPI并将其发布到Azure应用服务。从iOS设备执行API调用时一切正常... 查看详情

使用 Cordova 的 Azure 移动应用自定义身份验证

】使用Cordova的Azure移动应用自定义身份验证【英文标题】:AzuremobileappscustomauthenticationwithCordova【发布时间】:2016-11-0506:49:22【问题描述】:我目前有一个使用Azure移动应用程序的应用程序的后端解决方案。我已启用facebook、twitter... 查看详情

如何将 Azure AD 身份验证与 .net core mvc 中的自定义角色存储集成?

】如何将AzureAD身份验证与.netcoremvc中的自定义角色存储集成?【英文标题】:HowtoIntegrateAzureADauthenticationwithcustomRolestorein.netcoremvc?【发布时间】:2021-05-1303:21:32【问题描述】:我有使用.netcoremvc创建的Web应用程序,并启用了azureAD... 查看详情

创建通过外部 API 进行身份验证的自定义身份验证提供程序?

】创建通过外部API进行身份验证的自定义身份验证提供程序?【英文标题】:CreateacustomauthproviderthatauthenticatethroughanexternalAPI?【发布时间】:2017-05-1202:06:44【问题描述】:我是Laravel的新手。我已经有一个API可以对用户进行身份验... 查看详情

使用 IdentityServer 与创建基于 JWT 的自定义身份验证

】使用IdentityServer与创建基于JWT的自定义身份验证【英文标题】:UsingIdentityServervscreatingcustomJWTbasedauthentication【发布时间】:2017-03-2520:54:43【问题描述】:身份验证对我来说有点过头了。我的理解是:客户端执行登录API或身份验... 查看详情

从 UWP 客户端使用 Azure 移动服务进行身份验证

】从UWP客户端使用Azure移动服务进行身份验证【英文标题】:AuthenticatewithAzureMobileServicefromUWPclient【发布时间】:2016-07-1318:37:52【问题描述】:我正在努力通过AzureAD对Azure移动服务(.NET后端)进行身份验证。我一直在关注这个教... 查看详情

用于 Azure 移动服务 (REST) 的 Live Connect 身份验证令牌

】用于Azure移动服务(REST)的LiveConnect身份验证令牌【英文标题】:LiveConnectAuthenticationTokenforuseonAzureMobileServices(REST)【发布时间】:2013-02-0607:55:57【问题描述】:我有一个简单的Windows窗体应用程序来试用LiveConnect和Azure移动服务。不... 查看详情

基于 API 调用响应的自定义用户身份验证

】基于API调用响应的自定义用户身份验证【英文标题】:CustomuserauthenticationbaseontheresponseofanAPIcall【发布时间】:2016-01-2416:57:35【问题描述】:说明:我现在一直在使用Laravel进行一系列项目。在Laravel中实现用户认证很简单。现在... 查看详情

Azure 身份验证机制

】Azure身份验证机制【英文标题】:AzureAuthenticationMechanism【发布时间】:2016-06-0411:46:17【问题描述】:我在Azure云平台中有一个带有移动应用的应用服务。后端API是使用Node.js中的EasyAPIs制作的。在同一个资源组中,还有一个SQLServ... 查看详情

无法对 Azure 上的 API 管理执行资源所有者密码 OAuth2 身份验证

...:我有一个Flutter移动应用程序,它需要对AzureAPI管理后面定义的Azure函数进行身份验证和访问。我已经使用授权码授权对其进行了配置和测 查看详情

Azure API 管理 - 与底层服务进行身份验证和授权同步

】AzureAPI管理-与底层服务进行身份验证和授权同步【英文标题】:AzureAPIManagement-AuthenticateandAuthorizationsyncwithunderlyingservices【发布时间】:2021-05-0613:28:01【问题描述】:我是AzureAPI管理的新手,很高兴收到有关我的实施的建议和建... 查看详情

Azure API 服务器未能对请求进行身份验证

】AzureAPI服务器未能对请求进行身份验证【英文标题】:AzureAPITheserverfailedtoauthenticatetherequest【发布时间】:2014-09-1921:25:50【问题描述】:我有一个任务(我尝试使用辅助角色并上传控制台应用程序并运行.exe),该任务应该每天... 查看详情

使用 Azure AD 的 Azure API APP 身份验证

】使用AzureAD的AzureAPIAPP身份验证【英文标题】:AzureAPIAPPauthenticationusingAzureAD【发布时间】:2016-04-0704:56:21【问题描述】:对于Azure中Web/Api应用的设置刀片上的身份验证/授权设置,我有点困惑。如果我通过门户启用AzureAD身份验证... 查看详情